zoukankan      html  css  js  c++  java
  • C#操作Xml的两种方式 XPath XmlDocument XmlNodeList

    现有 XML 文件,内容如下:
    <?xml version="1.0" encoding="utf-8" ?>
    <Company>
      <Department >
        <Name>IT Department</Name>
        <Manager>猪头三</Manager>
        <Employees>
          <Employee>
            <ID code="001" >10001</ID>
            <Name>西门庆</Name>
            <Gender></Gender>
          </Employee>
          <Employee>
            <ID code="002">10202</ID>
            <Name>潘金莲</Name>
            <Gender></Gender>
          </Employee>
        </Employees>
      </Department>
    </Company>

    需要取得 Name 为 “西门庆” 的 Employee 节点,用XPath实现如下:

    XmlDocument xmlDoc = new XmlDocument();
    xmlDoc.Load( Path.Combine( Environment.CurrentDirectory, "demo.xml" ) );
    XmlNode emp = xmlDoc.SelectSingleNode( "/Company/Department/Employees/Employee[Name='西门庆']" );
    //emp 即为 定位到的 Employee 节点

    需要取得 code 为 002 的 Employee 节点, 用 XPath 实现如下:

    XmlDocument xmlDoc = new XmlDocument();
    xmlDoc.Load( Path.Combine( Environment.CurrentDirectory, "demo.xml" ) );
    XmlNode emp = xmlDoc.SelectSingleNode( "/Company/Department/Employees/Employee/ID[@code='002']/parent::node()" );

    XPath 寻径简介

    xml文件,是一种树状结构, XPath 是针对xml文件寻径的一种 pattern。以开头的xml数据为例,下面给出几个常用的情形:

    • 取得所有的 Employee
    /Company/Department/Employees/Employee

    XPath的开头是一个斜线(/)代表绝对路径

    • 取得所有的 Name,不分层次
    //Name

    XPath 以 // 开头表示不限层次的一种模式

    • 使用 * 匹配未知名称的元素(不能匹配未知层级)

    1. 取得所有的 Employee

    /Company/Department/Employees/*

    2. 取得Department下,包含有 Employee 作为子节点的节点

    /Company/Department/*/Employee
    • 使用 [] 选择分支

    XPath中的元素索引,是从 1 开始的

    我们要选择 第一个 Employee

    /Company/Department/Employees/Employee[1]

    选择最后一个Employee

    /Company/Department/Employees/Employee[last()]

    选择叫西门庆的Employee

    /Company/Department/Employees/Employee[Name='西门庆']
    • 多路选择

    XPath 用 | 或者 Or 进行多路选择

    /Company/Deparment/Manager | /Company/Deparment/Name
    • 选择属性

    XPath中的属性,使用@开头

    选择所有的 code 属性

  • 相关阅读:
    SpringMVC 数组类型的参数: Cannot generate variable name for non-typed Collection parameter type
    java.lang.NoClassDefFoundError: org/springframework/boot/context/embedded/FilterRegistrationBean
    Optional 的基本用法
    反序列化失败Failed to deserialize --- local class incompatible: stream classdesc serialVersionUID
    xxx.jar 中没有主清单属性
    低级sql语法错误: BadSqlGrammarException
    Apollo配置中心
    ELK+Beats日志分析系统部署
    Openface 入门
    spring boot 之 spring security 配置
  • 原文地址:https://www.cnblogs.com/wequst/p/1371769.html
Copyright © 2011-2022 走看看