• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    公众号

(C#)操作XML之查找

原作者: [db:作者] 来自: [db:来源] 收藏 邀请

有如下XML,如何根据书名(title)Harry Potter显示这个书名的详细内容(detail)呢?

<?xml version="1.0" encoding="utf-8" ?>
<bookstore>
  <book category="COOKING">
    <title lang="en">Everyday Italian</title>
    <detail>
      <author>Giada De Laurentiis</author>
      <year>2005</year>
      <price>30.00</price>
     </detail>
  </book>
  <book category="CHILDREN">
    <title lang="en">Harry Potter</title>
    <detail>
      <author>J K.Rowling</author>
      <year>2005</year>
      <price>29.99</price>
    </detail>
  </book>
  <book category="WEB">
    <title lang="en">Learning XML</title>
    <detail>
      <author>Erik T.Ray</author>
      <year>2003</year>
      <price>39.95</price>
    </detail>
  </book>
</bookstore>

<detail>结点是<title>兄弟结点,C#提供了NextSibling属性来获取相关数据。

另外利用XPath的相关语法可以快速的定位到需求的结点。

(XPath语法参考:http://www.w3school.com.cn/xpath/xpath_syntax.asp,http://www.cnblogs.com/yukaizhao/archive/2011/07/25/xpath.html)

所以,解题思路为:根据书名Harry Potter 定位到<title lang="en">Harry Potter</title>结点,然后遍历它的下一个兄弟结点的所有的Text结点。

其中XPath的定位语句为:bookstore/book/title[text()='Harry Potter']

        public string[] GetNextSiblingAllTextNodeInnerText(string node, string textNodeInnerText)
        {
            XmlDocument doc = XMLLoad();
            StringBuilder sbNode = new StringBuilder();
            sbNode.Append(node).Append("[text()='").Append(textNodeInnerText).Append("']");
            XmlNode nd = doc.SelectSingleNode(sbNode.ToString());
            this._TextNodeInnerTexts.Clear(); 
            TraverseTextNodeInnerText(nd.NextSibling);
            return this._TextNodeInnerTexts.ToArray(); 
        }

修改XPath的定位语句,也可以直接定位到符合条件的detail结点上。如: bookstore/book/title[text()='Harry Potter']/../detail

输出为:

J K.Rowling
2005
29.99

鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
上一篇:
C#后台无刷新页面弹出alert方法发布时间:2022-07-14
下一篇:
C#中两个窗体间的数据传递发布时间:2022-07-14
热门推荐
热门话题
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap