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 属性

  • 相关阅读:
    Ftp、Ftps与Sftp之间的区别
    Previous Workflow Versions in Nintex Workflow
    Span<T>
    .NET Core 2.0及.NET Standard 2.0 Description
    Announcing Windows Template Studio in UWP
    安装.Net Standard 2.0, Impressive
    SQL 给视图赋权限
    Visual Studio for Mac中的ASP.NET Core
    How the Microsoft Bot Framework Changed Where My Friends and I Eat: Part 1
    用于Azure功能的Visual Studio 2017工具
  • 原文地址:https://www.cnblogs.com/wequst/p/1371769.html
Copyright © 2011-2022 走看看