【发布时间】:2019-04-19 22:07:17
【问题描述】:
我正在尝试以我一贯的方式查询以下 XML,但由于它的声明和空的“NextQuantity”-“NextDate”字段,我在查询 XML 时遇到了麻烦。
这样做的正确方法是什么?
谢谢。
<StocksResp xmlns="http://xxxxxx" xmlns:i="http://www.w3.org/2001/XMLSchema-instance">
<Stocks>
<Stock>
<Sku>30101.06-L</Sku>
<Quantity>247610</Quantity>
<NextQuantity1>15243</NextQuantity1>
<NextDate1>2019-02-27</NextDate1>
<NextQuantity2 i:nil="true" />
<NextDate2 />
<NextQuantity3 i:nil="true" />
<NextDate3 />
<NextQuantity4 i:nil="true" />
<NextDate4 />
<NextQuantity5 i:nil="true" />
<NextDate5 />
<NextQuantity6 i:nil="true" />
<NextDate6 />
</Stock>
<Stock>
<Sku>30101.06-M</Sku>
<Quantity>241606</Quantity>
<NextQuantity1 i:nil="true" />
<NextDate1 />
<NextQuantity2 i:nil="true" />
<NextDate2 />
<NextQuantity3 i:nil="true" />
<NextDate3 />
<NextQuantity4 i:nil="true" />
<NextDate4 />
<NextQuantity5 i:nil="true" />
<NextDate5 />
<NextQuantity6 i:nil="true" />
<NextDate6 />
</Stock>
</Stocks>
<Count>4837</Count>
<Currency i:nil="true" />
<Language>ES</Language>
<ErrorCode i:nil="true" />
<ErrorMessage i:nil="true" />
</StocksResp>
================================================
DECLARE @xml XML
SELECT @xml = x.y FROM OPENROWSET (BULK 'file.xml',SINGLE_BLOB) as x(y)
SELECT
x.y.value('Sku[1]','varchar(15)'),
x.y.value('Quantity[1]','int'),
x.y.value('NextDate1[1]','varchar(20)'),
x.y.value('NextQuantity1[1]','int'),
'mr'
FROM @xml.nodes('Stocks/Stock') x(y)
【问题讨论】:
-
不清楚你在问什么
<NextQuantity1>15243</>不是有效的 XML。这只是Q中的一个错误吗?期望的结果是什么?你有什么问题?绝对看起来您应该使用WITH XMLNAMESPACES并在路径中包含StocksResp -
马丁,对不起,这是一个错误的输入。我已经更正了。无论如何,也感谢您的帮助。
标签: sql-server xml tsql xml-namespaces