如何使用XQuery查找自闭标签

时间:2017-05-22 06:08:56

标签: xquery marklogic

我需要在使用XQuery时找到自我结束标记XML,

例如,我有两种XML可供使用。

**Example 1** : fn:matches(<root><a>Eng</a><b>maths</b></root>//b ,<b/>);
answer : true

**Example 2** : fn:matches(<root><a>Eng</a><b/></root>//b ,<b/>);
answer : true

上面的例子都是得到 true 的结果 但我的期望是第一个XML没有自动关闭标签,所以它得到 false 所以它可以吗?请帮忙。

1 个答案:

答案 0 :(得分:4)

我认为您误解了fn:matches的用法。您可以在此处找到官方规范:https://www.w3.org/TR/xquery-operators/#func-matches。但简而言之,它是一种将字符串(第一个参数)与正则表达式(第二个参数)匹配的方法。

您正在提供元素节点。这些首先被转换为字符串,因此您正在有效地运行:

fn:matches("maths", "")

确实如此。您可能最好使用fn:deep-equal

然后再次,这无助于区分<b></b><b/>,因为在XML处理器中这些被认为是相同的。如果您只是在寻找空元素,您可以这样做:

let $xml := <root><a>Eng</a><b>maths</b></root>
return $xml//b[not(. = '')]

或:

let $xml := <root><a>Eng</a><b>maths</b></root>
return $xml//b[empty(node())]

HTH!