我需要在使用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 所以它可以吗?请帮忙。
答案 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!