Reputation: 1498
Consider simple XML document:
<html><body>
<table>
<tr><td> Item 1</td></tr>
<tr><td> Item 2</td></tr>
</table>
</body></html>
Using XPath /html/body/table/tr/td/text()
we will get
[" Item 1", " Item 2"].
Is it possible to trim white space, for example using normalize-space()
function to get this?
["Item 1", "Item 2"]
normalize-space(/html/body/table/tr/td/text())
yields trimmed contents of only the first td tag ["Item 1"]
Upvotes: 13
Views: 6151
Reputation: 243579
Using XPath "/html/body/table/tr/td/text()" we will get [" Item 1", " Item 2"].
Is it possible to trim white space for example using normalize-space() function to get ["Item 1", "Item 2"]?
Not in XPath 1.0.
In Xpath 2.0 this is simple:
/html/body/table/tr/td/text()/normalize-space(.)
In XPath 2.0 a location step of an XPath expression may be a function reference. This is used in the expression above to produce a sequence of xs:string
items, each of which is the result of applying normalize-space()
on the context node (any node selected by the subexpression that precedes the last location step).
Upvotes: 10
Reputation: 30590
If you're using XPath 2.0 you can just use /html/body/table/tr/td/normalize-space(.)
.
If you're stuck with XPath 1.0, I don't believe this is possible. You'll just have to loop over the resulting strings and normalize them.
Upvotes: 2