0

この質問に似ていますが、特定の属性に基づいて解析する必要があります。属性値に基づいて、同じ名前の要素を1つだけ選択するにはどうすればよいですか?

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
4

1 に答える 1

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"]、特定の属性値を選択することです。

于 2013-01-16T19:53:59.823 に答える