我有一个XML字符串如下:
<XML>
<ProductDetail>
<Barcode>170604658</Barcode>
<PropertyDetail>
<PropertyKey>Size</PropertyKey>
<PropertyValue>XXL</PropertyValue>
<PropertyKey>ProdTaxType</PropertyKey>
<PropertyValue>5%</PropertyValue>
</PropertyDetail>
</ProductDetail>
</XML>
我通过sp:
中的小型查询读取XML数据 SELECT *
FROM OPENXML(@hDoc, 'XML/ProductDetail/PropertyDetail', 2) WITH
(
PropertyKey VARCHAR(200) ,
PropertyValue VARCHAR(200)
)XML
但是,上面我得到一行数据如下:
PropertyKey PropertyValue
Size XXL
但是,根据XML Defined,我想获得如下数据:
PropertyKey PropertyValue
Size XXL
ProdTaxType 5%
对于相同的智能节点名称,我只从xml字符串中获取一条记录。所以,请在上面sp建议。
答案 0 :(得分:2)
因为你的XML形成不好,所以它应该是这样的:
DECLARE @hdoc varchar(max) = '<XML>
<ProductDetail>
<Barcode>150604658</Barcode>
<PropertyDetail>
<PropertyKey>Size</PropertyKey>
<PropertyValue>XXL</PropertyValue>
</PropertyDetail>
<PropertyDetail>
<PropertyKey>ProdTaxType</PropertyKey>
<PropertyValue>5%</PropertyValue>
</PropertyDetail>
</ProductDetail>
</XML>'
在您的示例中,PropertyDetail
具有重复的属性。
它也可以像这样重写:
DECLARE @hdoc varchar(max) = '<XML>
<ProductDetail Barcode="150604658">
<PropertyDetail PropertyKey="Size" PropertyValue="XXL" />
<PropertyDetail PropertyKey="ProdTaxType" PropertyValue="5%" />
</ProductDetail>
</XML>'
现在你不会想到写作:
<PropertyDetail PropertyKey="Size" PropertyValue="XXL"
PropertyKey="ProdTaxType" PropertyValue="5%" />
但其含义与您拥有的XML相同 - and duplicate attributes are not allowed。