猿问

Xml 节点的 Xml 后代

这是一个简化的 mxl 结构“xml”,


<store>


<book_1>

   <author_1><name>Alice</name><age>30</age></author_1>

   <author_2><name>Bob</name><age>31</age></author_2>

<book_1>

   <author_1><name>Charley</name><age>29</age></author_1>

   <author_2><name>Dory</name><age>25</age></author_2> 

<book_1>    

</store>

这是我尝试过的;


 XmlDocument submission = new XmlDocument();

   submission.LoadXml(xml);

    var bookNodes = submission.SelectNodes("//*[starts-with(local-name(),'book_')]");

这给了我一个书单。


 foreach (XmlNode book in bookNodes)

  {

    //I want to do something like to find book authors for the book in context e.g. for the first book I just want nodes for Alice and Bob.

   // var bookAuthors = book.SelectNodes("decendants::[starts-with(local-name(),'author_')"); 


  }

我怎么能做一个开始来检查下流元素?


编辑:似乎是一个错字......


var bookAuthors = book.SelectNodes("后代::*[starts-with(local-name(),'MeritCriterion_') ] ");


慕丝7291255
浏览 125回答 1
1回答

不负相思意

您可以使用以下 XPath 语法访问您的后代节点:XmlDocument submission = new XmlDocument();submission.LoadXml(xml);var bookNodes = submission.SelectNodes("//*[starts-with(local-name(),'book_')]");foreach (XmlNode book in bookNodes){&nbsp; &nbsp; var author = book.SelectNodes("descendant::*[starts-with(local-name(),'author_')]");&nbsp; &nbsp; foreach (XmlNode authorInfo in author)&nbsp; &nbsp; {&nbsp; &nbsp; &nbsp; &nbsp; Console.WriteLine(authorInfo .InnerText);&nbsp; &nbsp; }}简而言之,您需要访问descendant::(all)[starts-with],否则您只是想访问 XPath 中的任何后代。:)
随时随地看视频慕课网APP
我要回答