2011-11-10 9 views
0

私は以下の形式でXmlDocumentを持っています。次の検索を実行すると、C#XmlNodeには祖先型があります

XmlNode title = xmlDoc.SelectNodes("//Book/Title[contains(., \"Title3\")]"); 

タイトルであるXmlNodeが返されます。その本が出版物に該当するかどうかを知るにはどうすればよいですか?私は常にそのtitle.ParentNode.ParentNodeが存在すると仮定したくありません。言いたいことが直感的な方法があるはずです:

if(title.hasAncestor("Publication") != null) 
{ 
    // do whatever 
} 

すべてのヘルプは大幅に

<Publications> 
    <Novel> 
     <Book> 
      <Title>Title1</Title> 
      <Author>Author1</Author> 
      <Year>2000</Year> 
     </Book> 
     <Book> 
      <Title>Title2</Title> 
      <Author>Author2</Author> 
      <Year>2000</Year> 
     </Book> 
    </Novel> 
    <History> 
     <Book> 
      <Title>Title3</Title> 
      <Author>Author3</Author> 
      <Year>2000</Year> 
     </Book> 
     <Book> 
      <Title>Title4</Title> 
      <Author>Author4</Author> 
      <Year>2000</Year> 
     </Book> 
    </History> 
</Publications> 
<StudyGuides> 
    <Math> 
     <Book> 
      <Title>Title5</Title> 
      <Author>Author5</Author> 
      <Year>2000</Year> 
     </Book> 
     <Book> 
      <Title>Title6</Title> 
      <Author>Author6</Author> 
      <Year>2000</Year> 
     </Book> 
    </Math> 
    <Science> 
     <Book> 
      <Title>Title7</Title> 
      <Author>Author7</Author> 
      <Year>2000</Year> 
     </Book> 
     <Book> 
      <Title>Title8</Title> 
      <Author>Author8</Author> 
      <Year>2000</Year> 
     </Book> 
    </Science> 
</StudyGuides> 

答えて

0

を理解されるであろうあなたがancestor軸を使用してのXPathでこれを行うことができます。

//Book/Title[contains(., "Title3")][ancestor::Publications] 
+0

早速のご返事ありがとうございます。私はそれが出版物の下で "Title3"のinnerTextと私にすべてのタイトルノードを得ることを得る。しかし、もしXmlNodeを持っていて、それが出版物やStudyGuidesの下にあれば、どうすればよいのでしょうか? おそらく私はそれを間違って見ていますか? XmlDocumentの "Publications"の下に子ノードがある場合は、ノードがなくなるかどうかを確認する必要がありますか? – Koenyn

+0

@Koenynもし 'Title'ノードが' XmlNode'であるなら、 'XmlNode.ParentNode'を再帰的に使うか' titleNode.SelectSingleNode( "。[ancestor :: Publications]")== null'を使うかしてください。 – Richard

+0

:)ありがとう。心から感謝する。 titleNode.SelectSingleNode( "ancestor :: Publications")== nullに変更しなければならなかった – Koenyn

0
/Publications/*/Book/Title[contains(., 'Title3')] 
関連する問題