我正在尝试从嵌套的xml标签中查询信息。尽管我进行了许多网络搜索,并尝试了所有发现的内容,但是没有在我想要的嵌套中指定确切的数字元素,没有任何东西能让我得到我想要的结果。
我要运行的代码是这样的:
DECLARE @XmlIN XML
SELECT @xmlin = '
<ShippingScheduleResponse xmlns="rrn:org.xcbl:schemas/xcbl/v4_0/materialsmanagement/v1_0/materialsmanagement.xsd">
<ShippingScheduleResponseHeader>
<ShippingScheduleHeader>
<ScheduleReferences>
<OtherScheduleReferences>
<ReferenceCoded xmlns="rrn:org.xcbl:schemas/xcbl/v4_0/core/core.xsd">
<ReferenceTypeCoded>Other</ReferenceTypeCoded>
<ReferenceTypeCodedOther>HomeOwnerOccupied</ReferenceTypeCodedOther>
<ReferenceDescription>N</ReferenceDescription>
</ReferenceCoded>
<ReferenceCoded xmlns="rrn:org.xcbl:schemas/xcbl/v4_0/core/core.xsd">
<ReferenceTypeCoded>Other</ReferenceTypeCoded>
<ReferenceTypeCodedOther>WorkOrderNumber</ReferenceTypeCodedOther>
<ReferenceDescription>7456634</ReferenceDescription>
</ReferenceCoded>
<ReferenceCoded xmlns="rrn:org.xcbl:schemas/xcbl/v4_0/core/core.xsd">
<ReferenceTypeCoded>Other</ReferenceTypeCoded>
<ReferenceTypeCodedOther>SSID</ReferenceTypeCodedOther>
<ReferenceDescription>293283</ReferenceDescription>
</ReferenceCoded>
</OtherScheduleReferences>
</ScheduleReferences>
</ShippingScheduleHeader>
</ShippingScheduleResponseHeader>
</ShippingScheduleResponse>
'
SELECT
RefLineValue = ref.value('@xmlns', 'varchar(300)'),
RefTypeOther = ref.value('(ReferenceTypeCodedOther)[1]', 'varchar(50)'),
RefDescription = ref.value('(ReferenceDescription)[1]', 'varchar(50)')
FROM
@XmlIN.nodes('/ShippingScheduleResponse/ShippingScheduleResponseHeader/ShippingScheduleHeader/ScheduleReferences') AS XTbl(schref)
CROSS APPLY
schref.nodes('OtherScheduleReferences/ReferenceCoded') AS XTbl2(ref)
我正在尝试将referenceTypeCodedOther
和ReferenceDescription
的值放入表中。
最好的情况是获取ReferenceTypeCodedOther
的参考说明,该参考说明等于SSID,而不必放入硬编码的st.value('(//*:ReferenceCoded[7][1]//*:ReferenceDescription)[1]', 'char(200)')
任何帮助将不胜感激。 谢谢
答案 0 :(得分:1)
您的代码几乎是完美的:要从xml中提取值,您只需使用WITH
关键字即可处理名称空间:
;WITH XMLNAMESPACES (
'rrn:org.xcbl:schemas/xcbl/v4_0/materialsmanagement/v1_0/materialsmanagement.xsd' as ns1,
'rrn:org.xcbl:schemas/xcbl/v4_0/core/core.xsd' as ns2)
SELECT
RefTypeOther = ref.value('(ns2:ReferenceTypeCoded)[1]', 'varchar(50)'),
RefTypeOther = ref.value('(ns2:ReferenceTypeCodedOther)[1]', 'varchar(50)'),
RefDescription = ref.value('(ns2:ReferenceDescription)[1]', 'varchar(50)')
FROM
@XmlIN.nodes('/ns1:ShippingScheduleResponse/ns1:ShippingScheduleResponseHeader/ns1:ShippingScheduleHeader/ns1:ScheduleReferences') AS XTbl(schref)
CROSS APPLY
schref.nodes('ns1:OtherScheduleReferences/ns2:ReferenceCoded') AS XTbl2(ref)
结果:
现在您可以按RefDescription = 'SSID'