c#通过xpath读取xml示例

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

books.xml


代码如下:

<?xml version="1.0" encoding="ISO-8859-1"?>
<bookstore>

<book category="COOKING">
    <title lang="en">Everyday Italian</title>
    <author>Giada De Laurentiis</author>
    <year>2005</year>
    <price>30.00</price>
  </book>

<book category="CHILDREN">
    <title lang="en">Harry Potter</title>
    <author>J K. Rowling</author>
    <year>2005</year>
    <price>29.99</price>
  </book>

<book category="WEB">
    <title lang="en">XQuery Kick Start</title>
    <author>James McGovern</author>
    <author>Per Bothner</author>
    <author>Kurt Cagle</author>
    <author>James Linn</author>
    <author>Vaidyanathan Nagarajan</author>
    <year>2003</year>
    <price>49.99</price>
  </book>

<book category="WEB">
    <title lang="en">Learning XML</title>
    <author>Erik T. Ray</author>
    <year>2003</year>
    <price>39.95</price>
  </book>

</bookstore>

主程序


代码如下:

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

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

return xmlDoc;
        }

/// <summary>
        /// 根据指定的XPath表达式获取XML结点列表
        /// </summary>
        /// <param name="xmlDoc"></param>
        /// <param name="xpathExpr"></param>
        /// <returns></returns>
        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()<3]"; // 取bookstore的前两个book子元素
            var firstTwoBookNodes = GetXmlNodes(xmlDoc, indexExpr4);
            Console.WriteLine("XPath表达式为 /bookstore/book[position()<3],节点数为:" + firstTwoBookNodes.Count);
            Console.WriteLine(GetXmlNodeInfo(firstTwoBookNodes[0]));

Console.WriteLine();

// 带属性值过滤条件的XPath表达式
            var fileterExpr = "/bookstore/book[price>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();
        }
    }
}

(0)

相关推荐

  • java使用xpath解析xml示例分享

    XPath即为XML路径语言(XML Path Language),它是一种用来确定XML文档中某部分位置的语言.XPath基于XML的树状结构,提供在数据结构树中找寻节点的能力.起初 XPath 的提出的初衷是将其作为一个通用的.介于XPointer与XSL间的语法模型.但是 XPath 很快的被开发者采用来当作小型查询语言. XPathTest.java 复制代码 代码如下: package com.hongyuan.test; import java.io.File;import java

  • 深入XPath的详解以及Java示例代码分析

    复制代码 代码如下: import java.io.IOException;import javax.xml.parsers.*;import javax.xml.xpath.*;import org.w3c.dom.*;import org.xml.sax.SAXException;public class XpathTest { public static void main(String[] args) throws ParserConfigurationException,   SAXE

  • 解析XPath语法之在C#中使用XPath的示例详解

    XPath可以快速定位到Xml中的节点或者属性.XPath语法很简单,但是强大够用,它也是使用xslt的基础知识.示例Xml: 复制代码 代码如下: <?xml version="1.0" encoding="utf-8" ?><pets>  <cat color="black" weight="10">    <price>100</price>    <de

  • java使用xpath和dom4j解析xml

    1 XML文件解析的4种方法 通常解析XML文件有四种经典的方法.基本的解析方式有两种,一种叫SAX,另一种叫DOM.SAX是基于事件流的解析,DOM是基于XML文档树结构的解析.在此基础上,为了减少DOM.SAX的编码量,出现了JDOM,其优点是,20-80原则(帕累托法则),极大减少了代码量.通常情况下JDOM使用时满足要实现的功能简单,如解析.创建等要求.但在底层,JDOM还是使用SAX(最常用).DOM.Xanan文档.另外一种是DOM4J,是一个非常非常优秀的Java XML API,

  • 使用HtmlAgilityPack XPath 表达式抓取博客园数据的实现代码

    Web 前端代码 复制代码 代码如下: <%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="_Default" %> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.

  • DOM XPATH获取img src值的query

    复制代码 代码如下: $nodes = @$xpath->query("//*[@id='main_pr']/img/@src");$prurl = $nodes->item(0)->nodeValue;

  • xpath的数据和节点类型以及XPath中节点匹配的基本方法

    XPath数据类型 XPath可分为四种数据类型: 节点集(node-set) 节点集是通过路径匹配返回的符合条件的一组节点的集合.其它类型的数据不能转换为节点集. 布尔值(boolean) 由函数或布尔表达式返回的条件匹配值,与一般语言中的布尔值相同,有true和 false两个值.布尔值可以和数值类型.字符串类型相互转换. 字符串(string) 字符串即包含一系列字符的集合,XPath中提供了一系列的字符串函数.字符串可与数值类型.布尔值类型的数据相互转换. 数值(number) 在XPa

  • php XPath对XML文件查找及修改实现代码

    复制代码 代码如下: <?php /* <?xml version="1.0" encoding="utf-8"?> <article> <item> <title name="t1">11</title> <content>content1</content> <pubdate>2009-10-11</pubdate> </i

  • xpath简介_动力节点Java学院整理

    简单说,xpath就是选择XML文件中节点的方法. 所谓节点(node),就是XML文件的最小构成单位,一共分成7种. - element(元素节点) - attribute(属性节点) - text (文本节点) - namespace (名称空间节点) - processing-instruction (处理命令节点) - comment (注释节点) - root (根节点) xpath可以用来选择这7种节点.不过,下面的笔记只涉及最常用的第一种element(元素节点),因此可以将下文中

  • c#通过xpath读取xml示例

    需要修改Main方法第一行代码的路径为你的books.xml文件绝对路径或相对路径.代码演示了XPath各种语法的使用情况 books.xml 复制代码 代码如下: <?xml version="1.0" encoding="ISO-8859-1"?><bookstore> <book category="COOKING">    <title lang="en">Everyda

  • IE下JS读取xml文件示例代码

    使用JS读取xml文件,这里暂只考虑IE浏览器 step1 创建DOM对象 复制代码 代码如下: function createDom() { var xmlDoc = null; try { //IE if (typeof arguments.callee.activeXString != 'string') { var versions = [ "MSXML2.DOMDocument.6.0", "MSXML2.DOMDocument.3.0", "M

  • JS实现读取xml内容并输出到div中的方法示例

    本文实例讲述了JS实现读取xml内容并输出到div中的方法.分享给大家供大家参考,具体如下: note.xml文件结构: <nooo> <note> <to>George</to> <from>John</from> <heading>Reminder</heading> <body>Don't forget the meeting!</body> </note> <n

  • c# 读取XML文件的示例

    如下XML文件:(算是一个属性值比较多的xml文件...读取该Xml算是我在公司实际的一个任务) <?xml version="1.0" encoding="UTF-8"?> <serverset> <devset PrintNumber="1" ControlBarcode="" ControlEBarcode="" ControlPIX="" Print

  • ASP.NET中读取XML文件信息的4种方法与示例代码

    方法一 :使用XML控件 <% @ Page Language="C#"%> <html> <body>          <h3><font face="Verdana">读取XML方法一</font></h3>        <from runat=server>         <asp:Xml id="xml1" DocumentSour

  • PHP简单读取xml文件的方法示例

    本文实例讲述了PHP简单读取xml文件的方法.分享给大家供大家参考,具体如下: 我将软件版本更新中的版本号等数据信息存放在xml文件中,使用时将版本信息读取出来. xml文件内容如下: <xml version="v1.01" encoding="utf-8"> <updataMessages> <version>v1.8.7</version> </updataMessages> </xml>

  • PHP使用DOM和simplexml读取xml文档的方法示例

    本文实例讲述了PHP使用DOM和simplexml读取xml文档的方法.分享给大家供大家参考,具体如下: 实例  用DOM获取下列xml文档中所有金庸小说的书名,该xml文档所在位置为 ./books.xml: <?xml version="1.0" encoding="utf-8"?> <root> <book> <title>天龙八部</title> <author>金庸</autho

  • 用ASP读取XML文件的具体方法与示例

    分别保存下面两段代码,一个保存为readxml.asp另一个保存为test.xml,放在同一个目录下面,调试程序即可,在程序里面我已经做了解释,读取代码可以做成一个readxml的函数,通过使用输入的参数而读取xml不同数据记录的不同的值.这段程序的改编来自互联网,有什么出入请见谅. 复制代码 代码如下: <% dim xml,objNode,objAtr,nCntChd,nCntAtr Set xml=Server.CreateObject("Microsoft.XMLDOM"

  • jQuery读取XML文件的方法示例

    本文实例讲述了jQuery读取XML文件的方法.分享给大家供大家参考,具体如下: <?xml version="1.0" encoding="utf-8" ?> <taxrates> <taxrate id="1"> <lower>0</lower> <upper>500</upper> <rate>5</rate> <buckle&

随机推荐