使用基于属性的多个同名元素解析OpenXML

时间:2013-01-16 19:49:59

标签: sql openxml

与此question类似,但我需要根据特定属性进行解析。如何根据属性值仅选择其中一个具有相同名称的元素?

DECLARE @doc int
EXEC sp_xml_preparedocument @doc OUTPUT, N'
<rootnode>
  <group>
    <id>1</id>
     <anothernode lang="de">first string</anothernode>
     <anothernode lang="en">second string</anothernode>
  </group>
  <group>
    <id>1</id>
     <anothernode lang="en">I</anothernode>
     <anothernode lang="de">Ich</anothernode>
  </group>
</rootnode>'

SELECT *
FROM OPENXML (@doc, 'rootnode/group')
WITH
(
    id int 'id',
    anothernode  varchar(30) 'anothernode'
)

EXEC sp_xml_removedocument @doc

结果是:

1   first string
2   Ich

我需要:

1   second string
2   I

1 个答案:

答案 0 :(得分:2)

经过一些黑客行为后,我发现我可以通过以下SELECT获得正确的结果:

SELECT *
FROM OPENXML (@doc, 'rootnode/group')
WITH
(
    id int 'id',
    anothernode  varchar(30) 'anothernode[@lang="en"]'
)

结果是:

1   second string
2   I

主要区别是[@lang="en"],它选择特定的属性值。