2010-11-29 21 views
0

以下のxmlにidentifierrefがあるすべてのノード(子ノードを含む)を取得するために使用できるxpath構文はありますか?私はXmlNodeList nodeList = xmlDoc.SelectNodes("//@identifierref");のようなものを試してきましたが、アイテムノードの下に子タイトルノードを返しません。理想的には、identifierrefが存在するアイテムノードとそれらの下のタイトルノードにアクセスできるノードリストを取得したいと考えています。以下は私が扱っているXMLです。前もって感謝します。属性を持つすべてのノード

<organization xmlns:adlcp="test1" xmlns="test2"> 
     <title>1.2 Tester</title> 
     <item identifier="C2_LESSON1"> 
     <title>TestName1</title> 
     <item identifier="I_SCO1" identifierref="SCO01"> 
      <title>Tester SCO 1</title> 
     </item> 
     </item> 
     <item identifier="C2_LESSON2"> 
     <title>TestName2</title> 
     <item identifier="I_SCO2" identifierref="SCO01"> 
      <title>Tester SCO 2</title> 
     </item> 
     </item> 
     <item identifier="C2_LESSON3"> 
     <title>TestName3</title> 
     <item identifier="I_SCO3" identifierref="SCO01"> 
      <title>Tester SCO 3</title> 
     </item> 
     </item> 
    </organization> 

答えて

1

は、私は上記のすべてのitemを選択

//item[@identifier] 

その下 identifierref存在し、タイトル ノードを持つアイテム・ノードへ のアクセス権を持っているノードのリストを取得したいです文書内の要素はidentifier属性を持つ。

title要素の子も選択したい場合。

//item[@identifier]|//item[@identifier]/title 

しかし、ノードの設定結果の順序は、ホスト言語(文書の順序で最も多く働く)によって異なります。また、「グループ化」機能はありません。titleが不足している可能性がありますので、それぞれ2つずつ繰り返すことはできません。

だから、最初の最初のXPath式を使用して、任意のDOMメソッドなど相対XPath式を持つものitemなっtitleを反復:

title 
+0

2つの絶対パスの組合せずに別の式: '//* [(self :: item | self :: title/parent :: item)[@ identifier]] 'しかし、これは短くなく効率的ではないかもしれません。 –