如何使用 XQuery 查找自闭标签

How to find self closing tag using XQuery

我需要在使用 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 所以它有可能吗?请帮忙

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

您正在提供元素节点。这些首先转换为字符串,因此您实际上是 运行:

fn:matches("maths", "")

这确实 returns 正确。您最好使用 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!