【问题标题】:Nested XML Output嵌套 XML 输出
【发布时间】:2019-02-12 01:58:23
【问题描述】:

我正在尝试从嵌套的 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)

我正在尝试将 referenceTypeCodedOtherReferenceDescription 的值放入表中。

最好的情况是获取等于 SSID 的 ReferenceTypeCodedOther 的参考描述,而不必输入硬编码的 st.value('(//*:ReferenceCoded[7][1]//*:ReferenceDescription)[1]', 'char(200)')

任何帮助将不胜感激。 谢谢

【问题讨论】:

    标签: sql sql-server xml tsql sql-server-2008


    【解决方案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'进行过滤

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-03-10
      相关资源
      最近更新 更多