如何解决解析列中的XML数据
需要帮助来解析以下XML列,语言和值的基础。我能够按行解析值。有人可以帮忙吗?查询需要在SQL Server中。我尝试使用OPENXML
进行书写。但这没有给我想要的输出。任何帮助将不胜感激。
<Root>
<dataModel>
<repo name="SKU" profile="SKU"/>
</dataModel>
<SKU repo="SKU">
<SKU_SKU_Number>DR90A3000/U</SKU_SKU_Number>
<dynamicAttr>
<attrName>Power Supply Frequency</attrName>
<attrValue mLang="1">
<value lang="en">60 Hz</value>
<value lang="da-DK"/>
</attrValue>
<desc code="">60 Hz</desc>
</dynamicAttr>
<dynamicAttr>
<attrName>Ambient Operating Temperature (Max)</attrName>
<attrValue mLang="1">
<value lang="en">90°F </value>
<value lang="da-DK"/>
</attrValue>
<attrValue mLang="1">
<value lang="en"> 32°C</value>
<value lang="da-DK"/>
</attrValue>
<desc code="">90°F | 32°C</desc>
</dynamicAttr>
<dynamicAttr>
<attrName>Compatible Humidifier Pad</attrName>
<attrValue mLang="1">
<value lang="en"/>
<value lang="da-DK"/>
</attrValue>
<desc code=""> </desc>
</dynamicAttr>
<dynamicAttr>
<attrName>Building Size (Max)</attrName>
<attrValue mLang="1">
<value lang="en">Up to 20,000 cubic feet</value>
<value lang="da-DK"/>
</attrValue>
<desc code="">Up to 20,000 cubic feet</desc>
</dynamicAttr>
<dynamicAttr>
<attrName>Recommended Service Life</attrName>
<attrValue mLang="1">
<value lang="en">10 Years</value>
<value lang="da-DK"> </value>
</attrValue>
<desc code="">10 Years</desc>
</dynamicAttr>
<dynamicAttr>
<attrName>Current Draw</attrName>
<attrValue mLang="1">
<value lang="en">0.625 A</value>
<value lang="da-DK"> </value>
</attrValue>
<desc code="">0.625 A</desc>
</dynamicAttr>
<dynamicAttr>
<attrName>Operating Voltage</attrName>
<attrValue mLang="1">
<value lang="en">24 VAC</value>
<value lang="da-DK">25 VAC</value>
<value lang="da-OTH">26 VAC</value>
</attrValue>
<desc code="">24 VAC</desc>
</dynamicAttr>
<dynamicAttr>
<attrName>Static Pressure (Max)</attrName>
<attrValue mLang="1">
<value lang="en">0.3 in wc</value>
<value lang="da-DK"> </value>
</attrValue>
<desc code="">0.3 in wc</desc>
</dynamicAttr>
<dynamicAttr>
<attrName>Duct Opening Width</attrName>
<attrValue> </attrValue>
<desc code=""> </desc>
</dynamicAttr>
<dynamicAttr>
<attrName>Duct Opening Diameter</attrName>
<attrValue> </attrValue>
<desc code=""> </desc>
</dynamicAttr>
<dynamicAttr>
<attrName>Housing Material</attrName>
<attrValue> </attrValue>
<desc lang="en"> </desc>
<desc lang="da-DK"> </desc>
</dynamicAttr>
<dynamicAttr>
<attrName>Duct Opening Height</attrName>
<attrValue> </attrValue>
<desc code=""> </desc>
</dynamicAttr>
<dynamicAttr>
<attrName>Building Square Footage (Max)</attrName>
<attrValue mLang="1">
<value lang="en"> </value>
<value lang="da-DK"> </value>
</attrValue>
<desc code=""> </desc>
</dynamicAttr>
<dynamicAttr>
<attrName>Power Consumption</attrName>
<attrValue mLang="1">
<value lang="en"/>
<value lang="da-DK"/>
</attrValue>
<desc code=""> </desc>
</dynamicAttr>
<dynamicAttr>
<attrName>Mounting Type</attrName>
<attrValue> </attrValue>
<desc lang="en"> </desc>
<desc lang="da-DK"> </desc>
</dynamicAttr>
<dynamicAttr>
<attrName>Remote Mounting Distance (Max)</attrName>
<attrValue> </attrValue>
<desc code=""> </desc>
</dynamicAttr>
</SKU>
</Root>
所需的输出应该是
解决方法
假设您的XML数据包含在@XmlData
SQL变量中-您可以使用此XQuery获取您要查找的数据:
SELECT
SkuNumber = XC.value('(SKU_SKU_Number)[1]','varchar(50)'),AttrName = XC2.value('(attrName)[1]',Lang = xc3.value('@lang','varchar(10)'),Value = xc3.value('(.)[1]','varchar(50)')
FROM
@XmlData.nodes('/Root/SKU') AS XT(XC)
CROSS APPLY
XC.nodes('dynamicAttr') AS XT2(XC2)
CROSS APPLY
XC2.nodes('attrValue/value') AS XT3(XC3)
输出:
与传统的OPENXML
方法相比,内置的本机XQuery支持更受人们的青睐。
基本上,您需要两个嵌套的“循环”-第一个.nodes()
调用将使您在<SKU>
下的所有<Root>
元素(仅一个)中获取来自该节点的数据-那么您需要在<dynamicAttr>
内的所有<SKU>
XML元素上“循环”以获取一些信息,并且您需要再次在包含的<attrValue>/<value>
子节点上循环以获取最后的详细信息。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。