How does one retrieve the text in a node without selecting the text in the children?
<div id="comment">
<div class="title">Editor's Description</div>
<div class="changed">Last updated: </div>
<br class="clear">
Lorem ipsum dolor sit amet.
</div>
In other words, I want Lorem ipsum dolor sit amet.
rather than Editor's DescriptionLast updated: Lorem ipsum dolor sit amet.
The main difference between children and childNodes property is that children work upon elements and childNodes on nodes including non-element nodes like text and comment nodes.
No. Elements may contain attributes, other elements, or text.
XPath text() function is a built-in function of the Selenium web driver that locates items based on their text. It aids in the identification of certain text elements as well as the location of those components within a set of text nodes. The elements that need to be found should be in string format.
In the provided XML document:
<div id="comment">
<div class="title">Editor's Description</div>
<div class="changed">Last updated: </div>
<br class="clear">
Lorem ipsum dolor sit amet.
</div>
the top element /div
has 4 children nodes that are text nodes. The first three of these four text-node
children are whitespace-only
. The last of these 4 text-node
children is the one that is wanted.
Use:
/div/text()[last()]
This is different from:
/div/text()
The latter may (depending on whether whitespace-only
nodes are preserved by the XML parser) select all 4 text nodes, but you only want the last of them.
An alternative is (when you don't know exactly which text-node
you want):
/div/text()[normalize-space()]
This selects all text-node-children
of /div
that are not whitespace-only
text nodes.
Just select text()
instead of .
:
div/text()
On the given XML fragment, this returns:
Lorem ipsum dolor sit amet.
How about this :$doc/node()[3]/text()
Assuming $doc has the xml.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With