在此 SQL Server OPENXML 示例中:
declare @xmldata xml
set @xmldata =
'<?xml version="1.0"?>
<wddxPacket version="1.0">
<data>
<var dimension="task"><string>Task 1</string></var>
<var dimension="startdate"><string>2020-11-14</string></var>
</data>
<data>
<var dimension="startdate"><string>2020-11-15</string></var>
<var dimension="task"><string>Task 2</string></var>
</data>
</wddxPacket>'
DECLARE @hDoc int
EXEC sp_xml_preparedocument @hDoc OUTPUT, @xmldata
SELECT *
FROM OPENXML(@hDoc, '//wddxPacket/data',2)
WITH(
task varchar(200) 'var[1]/string',
startdate varchar(200) 'var[2]/string'
)
EXEC sp_xml_removedocument @hDoc
这是当前的输出:
task startdate
------ ----------
Task 1 2020-11-14
2020-11-15 Task 2
但我真的想要这个输出:
task startdate
------ ----------
Task 1 2020-11-14
Task 2 2020-11-15
为了识别内容,我不能单独使用“var”,因为所有感兴趣的元素都被命名为“var”。我不能使用位置 [1] 或 [2],因为位置编号在 XML 中不一致,导致当前混淆输出。如何根据“var”和“task”或“startdate”的“dimension”属性名称识别元素?
您需要使用不同的XPath表达式来匹配属性值,例如
var[@dimension="task"]/string
.像这样:
输出