我需要找到一个(只有一个)具有非空数据的XML节点。怎么做。
XML:
<root>
<tuple >
<old>
<a>
<b></b>
</a>
</old>
</tuple>
<tuple >
<old>
<a>
<b>http://google.com</b>
</a>
</old>
</tuple>
<tuple >
<old>
<a>
<b>http://google.com</b>
</a>
</old>
</tuple>
</root>
我使用的XPATH:
/root/tuple/old/a/b[text() and not(//a/b/text())]
和
/root/tuple/old/a/b[string-length(text())>0]/text()
但是对于上面的xpath表达式,我得到的所有节点都是非空的,我做错了什么。
答案 0 :(得分:4)
您可以使用以下XPath
/root/tuple/old/a/b[normalize-space(.) = ''][1]
我认为空格对你来说并不重要(所以我使用normalize-space()
函数)。点表示实际元素(即<b>
)。
正如你所说,你只需要一个元素,所以对于这种情况,有更多合适的元素,我只选择第一个元素([1]
)
答案 1 :(得分:0)
您可以使用以下Xpath检查元素是否具有值。
boolean(/root/tuple[position()=2]/old/a/b[text() and string-length()>0])
如果元素有文本
,则上述路径返回true删除布尔函数以获取实际文本,如下所示。
/root/tuple[position()=2]/old/a/b[text() and string-length()>0]
希望这有帮助。