gpt4 book ai didi

sql - XML 模式中的任何元素都会阻止 XQuery

转载 作者:行者123 更新时间:2023-12-02 02:22:59 25 4
gpt4 key购买 nike

我有以下 XML 架构:

CREATE XML SCHEMA COLLECTION test AS '
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<xsd:element name="PointConf">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="GlobalFlags">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="Order" type="OrderType"/>
<xsd:any processContents="lax" minOccurs="0" maxOccurs="unbounded"/>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
</xsd:sequence>
</xsd:complexType>
</xsd:element>

<xsd:complexType name="OrderType">
<xsd:attribute name="value" type="xsd:int" />
</xsd:complexType>
</xsd:schema>
'
GO

然后我这样使用:

DECLARE @xml xml(test)

SET @xml='<PointConf>
<GlobalFlags>
<Order value="1" />
</GlobalFlags>

</PointConf>'

SELECT @xml.value('(/PointConf/GlobalFlags/Order/@value)[1]','int')

SELECT 给我以下错误:

XQuery [value()]: 'value()' requires a singleton (or empty sequence), found operand of type '(xs:int | xdt:anyAtomicType *) ?'

如果模式中没有 xsd:any 元素,上面的代码可以正常工作。我做错了什么?

最佳答案

我使用语句让选择工作

SELECT @xml.value('string(/PointConf[1]/GlobalFlags/Order[1]/@value)','int')

我理解订单节点上对 [1] 索引的要求,因为这可以是一个列表,但是我不明白为什么 PointConf 需要它> 节点。

[1] 需要在列表存在的实际级别使用,以将该列表限制为单个返回值

string(...) 将节点集转换为字符串(或空字符串)。我认为这对 xsd:any 有帮助,尽管我不完全确定为什么 - 我认为这与处理节点 Order 完全丢失的可能性有关。


更新:

进一步调查:

SELECT @xml.value('string((/PointConf/GlobalFlags/Order/@value)[1])','int')

也有效。

所以它只是使它在这种情况下工作所需的字符串函数。

关于sql - XML 模式中的任何元素都会阻止 XQuery,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7267529/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com