BAII编写了以下XML架构(部分):
<xs:schema>
...
<xs:element name="Fields" minOccurs="1" maxOccurs="1">
<xs:complexType>
<xs:sequence>
<xs:element name="Field" minOccurs="3" maxOccurs="unbounded">
<xs:complexType>
<xs:simpleContent>
<xs:extension base="xs:string">
<xs:attribute name="title" type="xs:string"/>
<xs:attribute name="seq" type="xs:int" default="0" />
</xs:extension>
</xs:simpleContent>
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
...
</schema>
我正在尝试编写一个XML Schema,它允许我使用SQL Server 2012中的XML数据类型查询Field元素的text()属性。
Field元素仅包含文本值和属性(没有其他元素),并且是Fields元素的唯一后代。
我尝试将<simpleContent>
更改为<complexContent>
,但后来我不确定如何定义扩展标记中所需的基本属性。
XQuery是:
WITH xmlnamespaces('http://www.xxxx.com' as ns)
SELECT [BAI].query('/ns:XxxFile/ns:Record/ns:Fields/ns:Field/text()')
FROM [dbo].[BTRS]
答案 0 :(得分:0)
我在Stack Overflow上找到了答案here。
我很难搞清楚如何处理具有属性而没有元素的Field元素。我错误地认为唯一要做的就是将内容标记为 simpleContent 或 complexContent 。唯一需要的是将 mixed 属性添加到 complexType 标记并将其设置为true。我更改了上面的架构部分,如下所示:
<xs:schema>
...
<xs:element name="Fields" minOccurs="1" maxOccurs="1">
<xs:complexType>
<xs:sequence>
<xs:element name="Field" minOccurs="3" maxOccurs="unbounded">
<xs:complexType mixed="true">
<xs:attribute name="title" type="xs:string" default="Unknown" />
<xs:attribute name="seq" type="xs:int" default="0" />
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
...
</schema>
我现在可以在XQuery查询中访问Field元素的文本内容。