用于查找非空节点元素数据的XPATH表达式

时间:2013-11-27 06:06:12

标签: xml xpath

我需要找到一个(只有一个)具有非空数据的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表达式,我得到的所有节点都是非空的,我做错了什么。

2 个答案:

答案 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]

希望这有帮助。