Xml потомки для узла Xml - PullRequest
0 голосов
/ 18 мая 2018

Вот упрощенная структура 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_')"); 

  }

Как я могу просто начать с проверки дочерних элементов?

EDIT: Похоже, это опечатка ...

var bookAuthors = book.SelectNodes (" потомок :: * [начинается с (local-name (), 'MeritCriterion _') ] ");

1 Ответ

0 голосов
/ 18 мая 2018

Вы можете получить доступ к своим узлам-потомкам, используя следующий синтаксис XPath:

XmlDocument submission = new XmlDocument();
submission.LoadXml(xml);

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

foreach (XmlNode book in bookNodes)
{
    var author = book.SelectNodes("descendant::*[starts-with(local-name(),'author_')]");

    foreach (XmlNode authorInfo in author)
    {
        Console.WriteLine(authorInfo .InnerText);
    }
}

Короче говоря, вам нужно получить доступ к descendant::(all)[starts-with], иначе вы просто пытаетесь не получить доступа к потомкам в вашем XPath.:)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...