为了账号安全,请及时绑定邮箱和手机立即绑定

Xml 节点的 Xml 后代

Xml 节点的 Xml 后代

C#
慕丝7291255 2021-06-10 14:21:13
这是一个简化的 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_') ] ");
查看完整描述

1 回答

?
不负相思意

TA贡献1777条经验 获得超10个赞

您可以使用以下 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 中的任何后代。:)


查看完整回答
反对 回复 2021-06-20
  • 1 回答
  • 0 关注
  • 107 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信