如何使用 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!
我需要在使用 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!