tags:

views:

29

answers:

2

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 ["Item 1", "Item 2"]?

"normalize-space(/html/body/table/tr/td/text())" yields trimmed contents of only the first td tag ["Item 1"]

A: 

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.

Porges
+1  A: 

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).

Dimitre Novatchev