当前位置:  编程技术>.net/c#/asp.net

c#通过xpath读取xml示例

    来源: 互联网  发布时间:2014-10-30

    本文导语:  需要修改Main方法第一行代码的路径为你的books.xml文件绝对路径或相对路径。代码演示了XPath各种语法的使用情况 books.xml 代码如下:       Everyday Italian    Giada De Laurentiis    2005    30.00        Harry Potter    J K. Rowling  ...

需要修改Main方法第一行代码的路径为你的books.xml文件绝对路径或相对路径。代码演示了XPath各种语法的使用情况

books.xml

代码如下:


 
    Everyday Italian
    Giada De Laurentiis
    2005
    30.00
 

 
    Harry Potter
    J K. Rowling
    2005
    29.99
 

 
    XQuery Kick Start
    James McGovern
    Per Bothner
    Kurt Cagle
    James Linn
    Vaidyanathan Nagarajan
    2003
    49.99
 

 
    Learning XML
    Erik T. Ray
    2003
    39.95
 


主程序

代码如下:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Xml;

namespace XmlProcessTest
{
    public class Program
    {
        ///
        /// 加载XML文件
        ///
        /// XML文件路径
        ///
        public static XmlDocument LoadXmlDoc(string xmlFilePath)
        {
            var xmlDoc = new XmlDocument();
            xmlDoc.Load(xmlFilePath);

            return xmlDoc;
        }

        ///
        /// 根据指定的XPath表达式获取XML结点列表
        ///
        ///
        ///
        ///
        public static XmlNodeList GetXmlNodes(XmlDocument xmlDoc, string xpathExpr)
        {
            if (xmlDoc == null)
                return null;

            return xmlDoc.SelectNodes(xpathExpr);
        }

        public static string GetXmlNodeInfo(XmlNode node, string type="xml")
        {
            if (node == null)
                return "Empty node or error node";

            string xmlNodeInfo = null;
            switch (type)
            {
                case "text":
                    xmlNodeInfo = node.InnerText;
                    break;
                default:
                    xmlNodeInfo = node.InnerXml;
                    break;
            }

            return xmlNodeInfo;
        }

        public static void Main(string[] args)
        {
            var xmlDoc = LoadXmlDoc(@"你的books.xml文件路径");

            var rootExpr = "/bookstore";   //  根节点对应的XPath表达式
            var rootNode = GetXmlNodes(xmlDoc, rootExpr);   //
            Console.WriteLine("XPath表达式为 /bookstore,根节点bookstore的所有子节点XML内容如下:");
            Console.WriteLine(GetXmlNodeInfo(rootNode[0]));

            Console.WriteLine();

            var allBooksExpr = "/bookstore/book"; // 根节点bookstore的子元素的所有子节点
            var bookNodes = GetXmlNodes(xmlDoc, allBooksExpr);
            Console.WriteLine("XPath表达式为 bookstore/book,book节点共有:" + bookNodes.Count);

            Console.WriteLine();

            var anyBookExpr = "//book"; // 选取所有book子元素,而不管它们在文档中的位置
            var anyBookNodes = GetXmlNodes(xmlDoc, anyBookExpr);
            Console.WriteLine("XPath表达式为 //book,book节点共有:" + anyBookNodes.Count);
            Console.WriteLine(anyBookNodes[0].InnerXml);
            Console.WriteLine(anyBookNodes[0].OuterXml);

            Console.WriteLine();

            var categoryExpr = "//@category";   // 选取名为category的所有属性
            var allCategoryNodes = GetXmlNodes(xmlDoc, categoryExpr);
            Console.WriteLine("XPath表达式为 //@category,category节点共有:" + allCategoryNodes.Count);
            Console.WriteLine(allCategoryNodes[0].InnerText);
            Console.WriteLine(allCategoryNodes[0].InnerXml);

            Console.WriteLine();

            var titleWithLangExpr = "//title[@lang]";   // 选取所有带有lang属性的title节点
            var titleWithLangNodes = GetXmlNodes(xmlDoc, titleWithLangExpr);
            Console.WriteLine("XPath表达式为 //title[@lang],带lang属性的title节点共有:" + titleWithLangNodes.Count);
            Console.WriteLine(GetXmlNodeInfo(titleWithLangNodes[0]));

            var englishTitleExpr = "//title[@lang='en']";   // 选取所有lang属性值为en的title节点
            var englishTitleNodes = GetXmlNodes(xmlDoc, englishTitleExpr);
            Console.WriteLine("XPath表达式为 //title[@lang='en'],lang属性值为en的title节点共有:" + englishTitleNodes.Count);
            Console.WriteLine(GetXmlNodeInfo(englishTitleNodes[0]));

            Console.WriteLine();

            // 使用索引的XPath查询
            var indexExpr = "/bookstore/book[1]";   // 取bookstore子元素的第一个book元素
            var firstBookNode = GetXmlNodes(xmlDoc, indexExpr);
            Console.WriteLine("XPath表达式为 /bookstore/book[1],节点数为:" + firstBookNode.Count);
            Console.WriteLine(GetXmlNodeInfo(firstBookNode[0]));

            Console.WriteLine();

            var indexExpr2 = "/bookstore/book[last()]"; // 取bookstore子元素的最后一个book元素
            var lastBookNode = GetXmlNodes(xmlDoc, indexExpr2);
            Console.WriteLine("XPath表达式为 /bookstore/book[last()],节点数为:" + lastBookNode.Count);
            Console.WriteLine(GetXmlNodeInfo(lastBookNode[0]));

            Console.WriteLine();

            var indexExpr3 = "/bookstore/book[last()-1]"; // 取bookstore子元素的倒数第二个book元素
            var nextByLastBookNode = GetXmlNodes(xmlDoc, indexExpr3);
            Console.WriteLine("XPath表达式为 /bookstore/book[last()-1],节点数为:" + lastBookNode.Count);
            Console.WriteLine(GetXmlNodeInfo(nextByLastBookNode[0]));

            Console.WriteLine();

            var indexExpr4 = "/bookstore/book[position()35.00]";   // 选取bookstore的所有price属性值大于35.00的book元素
            var bookGt35Nodes = GetXmlNodes(xmlDoc, fileterExpr);
            Console.WriteLine("XPath表达式为 /bookstore/book[price>35.00],节点数为:" + bookGt35Nodes.Count);
            Console.WriteLine(GetXmlNodeInfo(bookGt35Nodes[0]));

            // 通配符
            // @*                匹配任何属性节点
            // node()             匹配任何类型的节点
            // /bookstore/*   选取 bookstore 元素的所有子元素
            // //*                   选取文档的所有元素
            // //title[@*]        选取所有带有属性的 title 元素
            var allTitleWithAttrExpr = "//title[@*]";
            var allTitleWithAttrNodes = GetXmlNodes(xmlDoc, allTitleWithAttrExpr);
            Console.WriteLine("XPath表达式为 title[@*],节点数为:" + allTitleWithAttrNodes.Count);
            Console.WriteLine(GetXmlNodeInfo(allTitleWithAttrNodes[0]));

            Console.WriteLine();

            // |        或
            var titleAndPriceExpr = "//book/title | //book/price";
            var titleAndPriceNodes = GetXmlNodes(xmlDoc, titleAndPriceExpr);
            Console.WriteLine("XPath表达式为 //book/title | //book/price,节点数为:" + titleAndPriceNodes.Count);
            Console.WriteLine(GetXmlNodeInfo(titleAndPriceNodes[0]));

            // text()  选取文本
            var titleTextExpr = "//title/text()";
            var titleTextNodes = GetXmlNodes(xmlDoc, titleTextExpr);
            Console.WriteLine("XPath表达式为 //title/text(),节点数为:" + titleTextNodes.Count);
            Console.WriteLine(titleTextNodes[0].Value); // 文本节点的值

            Console.ReadKey();
        }
    }
}


    
 
 

您可能感兴趣的文章:

  • c#通过委托delegate与Dictionary实现action选择器代码举例
  • C#通过反射创建自定义泛型
  • .NET下 c#通过COM组件操作并导出Excel实例代码
  • c#通过unicode编码判断字符是否为中文示例分享
  • C# datatable 不能通过已删除的行访问该行的信息处理方法
  • c# 通过经纬度查询 具体的地址和区域名称
  • c#通过httphandler添加水印的代码
  • c#通过进程调用cmd判断登录用户权限代码分享
  • C#实现通过winmm.dll控制声音播放的方法
  • C#通过IComparable实现ListT.sort()排序
  • c#通过ip获取地理信息
  • c# HttpWebRequest通过代理服务器抓取网页内容应用介绍
  • C#实现通过程序自动抓取远程Web网页信息的代码
  • C#通过接口与线程通信(捕获线程状态)示例代码
  • 通过C#调用cmd来修改服务启动类型
  • C#通过WIN32 API实现嵌入程序窗体
  • C#通过XML节点属性/属性值读取写入XML操作代码实例
  • C#实现通过模板自动创建Word文档的方法
  • C#通过经纬度计算2个点之间距离的实现代码
  • php通过socket_bind()设置IP地址代码示例
  • jquery 通过name快速取值示例
  • python通过scapy获取局域网所有主机mac地址示例
  • 通过spring用beanshell实现java接口示例
  • 输出java进程的jstack信息示例分享 通过线程堆栈信息分析java线程
  • http basic authentication通过post方式访问api示例分享 basic认证示例
  • java通过共享变量结束run停止线程的方法示例
  • java HashMap通过value反查key的代码示例
  • C# datatable 不能通过已删除的行访问该行的信息处理方法 iis7站长之家
  • jquery通过select列表选择框对表格数据进行过滤示例
  • php通过字符串调用函数示例
  • 通过特性(attribute)为枚举添加更多信息示例
  •  
    本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
    本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • 通过读取/dev/sdb*获得U盘序列号
  • 发分了 急急 跪谢 100 分 需要从文件中每次读取 固定(通过参数传入)字节
  • 通过linux驱动接口读取串口来自另外一个CPU发送的数据,有几个疑问:
  • linux下通过对文件读取方式查询oracle的版本信息
  • linux下能够通过系统调用读取文件的物理地址等信息吗?
  • apache通过php的oci函数读取Oracle(字符集ZHS16GBK)时,显示乱码,如何解决?
  • 问两个linux shell变量赋值的问题:(1)通过输出结果(2)从文件中读取 谢谢!
  • 不启动到RED HAT LINUX中能否通过其他的方式读取该硬盘上的资料?(忘了用户名和密码,重要资料都在里边,不能格)!!!
  • python通过ElementTree操作XML获取结点读取属性美化XML
  • Web系统通过EXE文件实现读取客户电脑MAC等硬件信息且兼容非IE浏览器
  • 怎样通过读取数据库,对前面的<select>的选择,动态生成后面一个<select>??急用!一定给分,
  • java解析dbf之通过javadbf包生成和读取dbf文件
  • 通过jxl.jar 读取、导出excel的实例代码
  • 通过Jquery的Ajax方法读取将table转换为Json
  • 通过javascript实现DIV居中,兼容各浏览器版本
  • applet可以不通过数字签名,通过设置IE直接在本地访问本地文件吗
  • 通过javascript库JQuery实现页面跳转功能代码
  • 我使用.net编译通过,但是使用g++编译不能通过。总是提示我undefined reference to ~myclass()
  • linux下通过crond实现自动执行程序
  • 紧急求救!能通过jdbc怎样连接sqlsever 然后通过 for xml 关键字得到xml流吗?
  • 通过docker commit命令保存对docker容器的修改
  • 我想我的网站屏蔽掉通过某些网站过来的访问,我想通过htaccess 文件来做,请大家帮帮我。
  • 通过docker run命令运行新的docker镜像
  • 如何通过INTERNET访问通过共项一条线路上网的局域网中的机器???
  • 通过docker ps命令检查运行中的docker镜像
  • 为什么g++编译通过了,而gcc却编译通过不了???
  • Session id实现通过Cookie来传输方法及代码参考
  • 请指点: 在windows下能否通过程序来获取linux下的用户列表,甚至通过自己写的windows程序界面增加修改linux的用户
  • 通过docker search命令搜索可用docker镜像
  • Jbuilder第一次编译说缺包,引入通过!然后把原来引入的注释,又通过!上帝,救我!
  • Python3通过request.urlopen实现Web网页图片下载


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3