XPath语法 在C#中使用XPath示例

跨厂商网络设备的RADIUS认证:Windows NPS的兼容性与最佳实践 本文详细探讨了Windows NPS在多厂商网络环境中的RADIUS认证实践,特别针对华为、华三、思科等主流设备的兼容性问题提供解决方案。从基础配置到高级优化,涵盖VSA属性映射、认证协议选择及安全加固措施,帮助企业实现统一身份认证并提升网络安全性。 阅读详情

XPath语法 在C#中使用XPath示例

XPath可以快速定位到Xml中的节点或者属性。XPath语法很简单,但是强大够用,它也是使用xslt的基础知识。

示例Xml:

<?xml version="1.0" encoding="utf-8" ?> 
<pets> 
  <cat color="black" weight="10"> 
    <price>100</price> 
    <desc>this is a black cat</desc> 
  </cat> 
  <cat color="white" weight="9"> 
    <price>80</price> 
    <desc>this is a white cat</desc> 
  </cat> 
  <cat color="yellow" weight="15"> 
    <price>80</price> 
    <desc>this is a yellow cat</desc> 
  </cat> 
  
  
  <dog color="black" weight="10"> 
    <price>100</price> 
    <desc>this is a black dog</desc> 
  </dog> 
  <dog color="white" weight="9"> 
    <price>80</price> 
    <desc>this is a white dog</desc> 
  </dog> 
  <dog color="yellow" weight="15"> 
    <price>80</price> 
    <desc>this is a yellow dog</desc> 
  </dog> 
</pets>

 

XPath的语法:

1. XPath中的符号

符号

说明

示例

示例说明

/

表示从根节点开始选择

/pets

选择根节点pets

表示节点和子节点之间的间隔符

/pets/dog

选择pets节点下的dog节点

//xx

表示从整个xml文档中查找,而不考虑当前节点位置

//price

选择文档中所有的price节点

.

单个英文半角句点表示选择当前节点

/pets/.

选择pets节点

..

双点,表示选择父节点

/pets/dog[0]/..

表示pets节点,也就是第一个dog节点的父节点

@xx

表示选择属性

//dog/@color

表示选择所有dog节点的color属性集合

[…]

中括号表示选择条件,括号内为条件

//dog[@color=’white’]

所有color为white的dog节点

//dog[/price<100]

所有price字节点值小于100的dog节点

中括号内数字为节点索引,类似c#等语言中的数组,数组下标是从1开始的

//dog[1]

第1个dog节点

//dog[last()]

最后一个dog节点,last()是xPath内置函数

|

单竖杠表示合并节点结合

//dog[@color=’white’] | //cat[@color=’white’]

color属性为white的dog节点和color属性为white的cat节点

*

星号表示任何名字的节点或者属性

//dog/*

表示dog节点的所有子节点

//dog/@*

表示dog节点的所有属性节点

2. XPath数学运算符
+ 加号表示加
- 表示数字相减
* 表示乘以
div 表示除以,这里数学上的除号/已经被用作节点之间分隔符了
mod 表示取余
3. XPath逻辑运算符
= 等于,相当于c#中的 ==
!= 不等于
> 大于
>= 大于等于
< 小于
<= 小于等于
and 并且 与关系
or 或者 或关系
4. XPath Axes 从字面翻译这个是XPath轴的意思,但根据我的理解这个翻译成XPath节点关系运算关键字更合适,就是一组关键字加上::双冒号表示和当前节点有关系的一个或者一组节点.
使用语法: axisname::nodetest[predicate] 即轴名字::节点名字[取节点条件]
具体说明如下:

关键字

说明

示例

示例说明

ancestor

当前节点的父祖节点

ancestor::pig

当前节点的祖先节点中的pig节点

ancestor-or-self

当前节点以及其父祖节点

ancestor::pig

attribute

当前节点的所有属性

attribute::weight

相当于@weight,attribute::和@是等价的

child

当前节点的所有字节点

child::*[name()!=’price’]

选择名字不是price的子节点

descendant

子孙节点

descendant::*[@*]

有属性的子孙节点

descendant-or-self

子孙节点以及当前节点

descendant-or-self::*

following

Xml文档中当前节点之后的所有节点

following::*

following-sibling

当前节点的同父弟弟节点

following-sibling::

preceding

Xml文档中当前节点之前的所有节点

preceding::*

namespace

选取当前节点的所有命名空间节点

namespace::*

parent

当前节点的父节点

parent::

相当于双点..

preceding-sibling

当前节点之后的同父兄节点

preceding-sibling::*

self

当前节点

self::*

相当于单点.


5. 常用的XPath函数介绍:
在XPath表达式中常用的函数有下面两个:
position() 表示节点的序号例如 //cat[position() = 2] 表示取序号为2的dog节点
last() 表示取最后一个节点 //cat[last()]
name() 表示当前节点名字 /pets/*[name() != 'pig'] 表示/pets下名字不是pig的子节点
XPath的函数还有很多,包括字符串函数,数字函数和时间函数等,具体可以参考w3的网站。
以上是XPath的语法,下面我们看下如何在.Net中使用XPath
在.Net中可以通过XPathDocument或者XmlDocument类使用XPath。XPathDocument是只读的方式定位Xml节点或者属性文本等,而XmlDocument则是可读写的。
如下代码示例展示了如何使用XPathDocument和XmlDocument。
 
using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Text; 
using System.Xml.XPath; 
using System.Xml; 
  
namespace UseXPathDotNet 
{ 
    class Program 
    { 
        static void Main(string[] args) 
        { 
            UseXPathWithXPathDocument(); 
  
            UseXPathWithXmlDocument(); 
  
            Console.Read(); 
        } 
  
        static void UseXPathWithXmlDocument() 
        { 
            XmlDocument doc = new XmlDocument(); 
            doc.Load("http://www.cnblogs.com/yukaizhao/rss"); 
            //使用xPath选择需要的节点 
            XmlNodeList nodes = doc.SelectNodes("/rss/channel/item[position()<=10]"); 
            foreach (XmlNode item in nodes) 
            { 
                string title = item.SelectSingleNode("title").InnerText; 
                string url = item.SelectSingleNode("link").InnerText; 
                Console.WriteLine("{0} = {1}", title, url); 
            } 
        } 
  
        static void UseXPathWithXPathDocument() 
        { 
            XPathDocument doc = new XPathDocument("http://www.cnblogs.com/yukaizhao/rss"); 
            XPathNavigator xPathNav = doc.CreateNavigator(); 
            //使用xPath取rss中最新的10条随笔 
            XPathNodeIterator nodeIterator = xPathNav.Select("/rss/channel/item[position()<=10]"); 
            while (nodeIterator.MoveNext()) 
            { 
                XPathNavigator itemNav = nodeIterator.Current; 
                string title = itemNav.SelectSingleNode("title").Value; 
                string url = itemNav.SelectSingleNode("link").Value; 
                Console.WriteLine("{0} = {1}",title,url); 
            } 
  
        } 
    } 
}

XPath使用示例,请看下面的代码注释 
 
using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Text; 
using System.IO; 
using System.Xml; 
  
namespace UseXPath1 
{ 
    class Program 
    { 
        static void Main(string[] args) 
        { 
            string xml = @"<?xml version=""1.0"" encoding=""utf-8"" ?> 
<pets> 
  <cat color=""black"" weight=""10"" count=""4""> 
    <price>100</price> 
    <desc>this is a black cat</desc> 
  </cat> 
  <cat color=""white"" weight=""9"" count=""5""> 
    <price>80</price> 
    <desc>this is a white cat</desc> 
  </cat> 
  <cat color=""yellow"" weight=""15"" count=""1""> 
    <price>110</price> 
    <desc>this is a yellow cat</desc> 
  </cat> 
  
  
  <dog color=""black"" weight=""10"" count=""7""> 
    <price>114</price> 
    <desc>this is a black dog</desc> 
  </dog> 
  <dog color=""white"" weight=""9"" count=""4""> 
    <price>80</price> 
    <desc>this is a white dog</desc> 
  </dog> 
  <dog color=""yellow"" weight=""15"" count=""15""> 
    <price>80</price> 
    <desc>this is a yellow dog</desc> 
  </dog> 
  
    <pig color=""white"" weight=""100"" count=""2""> 
    <price>8000</price> 
    <desc>this is a white pig</desc>     
    </pig> 
</pets>"; 
  
            using (StringReader rdr = new StringReader(xml)) 
            { 
                XmlDocument doc = new XmlDocument(); 
                doc.Load(rdr); 
  
                //取所有pets节点下的dog字节点 
                XmlNodeList nodeListAllDog = doc.SelectNodes("/pets/dog"); 
  
                //所有的price节点 
                XmlNodeList allPriceNodes = doc.SelectNodes("//price"); 
  
                //取最后一个price节点 
                XmlNode lastPriceNode = doc.SelectSingleNode("//price[last()]"); 
  
                //用双点号取price节点的父节点 
                XmlNode lastPriceParentNode = lastPriceNode.SelectSingleNode(".."); 
  
                //选择weight*count=40的所有动物,使用通配符* 
                XmlNodeList nodeList = doc.SelectNodes("/pets/*[@weight*@count=40]"); 
  
                //选择除了pig之外的所有动物,使用name()函数返回节点名字 
                XmlNodeList animalsExceptPigNodes = doc.SelectNodes("/pets/*[name() != 'pig']"); 
                 
  
                //选择价格大于100而不是pig的动物 
                XmlNodeList priceGreaterThan100s = doc.SelectNodes("/pets/*[price div @weight >10 and name() != 'pig']"); 
                foreach (XmlNode item in priceGreaterThan100s) 
                { 
                    Console.WriteLine(item.OuterXml); 
                } 
  
                //选择第二个dog节点 
                XmlNode theSecondDogNode = doc.SelectSingleNode("//dog[position() = 2]"); 
  
                //使用xpath ,axes 的 parent 取父节点 
                XmlNode parentNode = theSecondDogNode.SelectSingleNode("parent::*"); 
  
                //使用xPath选择第二个dog节点前面的所有dog节点 
                XmlNodeList dogPresibling = theSecondDogNode.SelectNodes("preceding::dog"); 
  
                //取文档的所有子孙节点price 
                XmlNodeList childrenNodes = doc.SelectNodes("descendant::price"); 
            } 
  
            Console.Read(); 
        } 
    } 
}

文章转自: http://www.cnblogs.com/yukaizhao/archive/2011/07/25/xpath.html
硬件基础(4):(6)高精度ADC设计中模拟地与数字地的划分与连接 在实际 PCB 设计中,**接地与布线**对于获得干净的参考电压和高精度 ADC 测量至关重要。下面详细阐述**如何在硬件层面减少数字噪声耦合到模拟电路、保障参考电压的稳定性**。 阅读详情

相关推荐

Pico-实时预览工具PreviewTool

Unity XR SDK与Preview Tool下载链接:SDK - Pico Developer Platform1、下载Preview Tool后,将PreviewTool的APK先安装在VR头显里2、在PC端打开Preview Tool.exe文件Window -> Package Manager -> Add package from disk,选择下载的pico sdk中的package.json(如下图),Open导入。Edit -> Project Settings,设置设备和安卓版本,如下

晴天下的大头娃娃 4252

C#----XPath

XML 文档对象模型 (DOM) 包含的方法使您可以使用 XML 路径语言 (XPath) 浏览功能查询 DOM 中的信息。 可以使用 XPath 查找单个特定节点,或查找与某个条件匹配的所有节点。XPath 选择方法 如果不使用 XPath,则检索 DOM 中的一个或多个节点将需要大量导航代码。 而使用 XPath 只需要一行代码。 DOM 类提供两种 XPath 选择方法。 SelectSingleNode 方法返回符合选择条件的第一个节点。 SelectNodes 方法返回包含匹配节点的 XmlNod

Xiuming1126的专栏 2013

【 Git学习记录(三)】推荐四款主流的Git代码托管平台 —— GitHub、GitLab、Gitee、Coding

了解过Git之后,作为一个程序猿最基本的,你还需要了解目前主流的在线代码托管平台,并至少选择其中一款在平时开发中使用。这里特别介绍以下四款: 国外平台 GitHub —— 全球最流行的代码托管平台 GitLab —— 基于git的仓库管理程序 国内平台 Gitee —— 开源中国旗下的代码托管平台 Coding —— 支持社交元素的代码托管平台 一. GitHub 链接地址:https://github.com/ GitHub目前是全球最流行的代码托管平台(别称:全球最大的同性交友.

JZevin的博客 6092

C# XPath的概念

Xpath

钢铁男儿 1716

GAN模型中的常见变体有哪些,如DCGAN、WGAN和CGAN等?

生成对抗网络(GAN)是一种强大的深度学习模型,它由生成器和判别器两个网络组成,通过对抗训练的方式实现生成数据的能力。随着研究的发展,出现了许多GAN的变体,每个变体都有其独特的改进和特点。

huidhsu的博客 2262

基于MS5351的三通道可编程时钟发生器设计

时钟发生器是数字系统时序验证与信号完整性测试的核心基础设备,其原理基于锁相环(PLL)对参考晶振进行倍频与分频控制,通过寄存器配置实现多路独立频率输出。技术价值体现在高精度、低抖动、快速切换与工程可部署性之间取得平衡,尤其适用于FPGA/ASIC参考时钟调试、ADC/DAC采样时钟验证及嵌入式硬件时序裕量评估等场景。本方案采用MS5351三通道时钟芯片与ESP32主控协同架构,在保证LVCMOS输出质量与I²C可编程性的前提下,优化电源噪声抑制、晶体负载匹配和跨板信号完整性,兼顾成本、周期与实测稳定性,为实

weixin_31715353的博客 212

C# 网络爬虫+HtmlAgilityPack+Xpath+爬虫工具类的封装的使用

C# 网络爬虫+HtmlAgilityPack+Xpath的使用

qq_53679247的博客 3393

C# MES通信从入门到精通(1)——串口传输文件

本文详细介绍了在Mes通信领域如何使用串口发送文件,由实战经验总结,堪称MES通信领域的葵花宝典!

qq_34059233的博客 3752

C#使用Linq to XML进行XPath查询

最近在用到HtmlAgliltyPack进行结点查询时,发现这里选择结点使用的是XPath。所以这里总结一下在C#中使用XPath查询XML的方法。习惯了用Linq,这里也是用的Linq to xml的。 Linq To XML的核心类是XDocument和XElement、XAttribute,需要引用using System.Xml.Linq命名空间。 这三个类简单理解为:...

weixin_30512043的博客 563

【即插即用模块】注意力篇 | ECCV 2024 | DPB:高低频动态分离+双提示融合,PSNR直冲40+!

本文提出了一种基于频率提示的图像恢复方法FPro,通过动态滤波器分离输入特征的高低频分量,并采用双提示块(DPB)进行频域专属提示生成与调制。DPB包含低频提示调制器(LPM)和高频提示调制器(HPM),分别处理不同频段信号,通过生成提示组件并融合解码器特征来优化恢复效果。实验表明,该方法在U型结构中表现优异,尤其适用于分割、底层视觉和多模态任务。模块通过动态无监督频率分离、频域专属提示生成和适配性融合机制,有效解决了传统方法对频域信息关注不足的问题,显著提升了图像恢复质量。

主要更新底层视觉(去噪、超分等)相关的科研内容,形式为【论文精读】+【论文复现】 148

Python爬虫技术:使用Playwright和Twitter API v2高效获取Twitter/X数据完全教程

遵守规则:始终遵循Twitter的使用条款和速率限制错误处理:实现完善的错误处理和重试机制数据质量:进行数据清洗和验证性能优化:使用异步处理和合理的延迟设置可维护性:模块化代码,便于维护和扩展。

2201_76125261的博客 671

C#XML(五) - XPath

xpath

weixin_43152495的博客 426

SAP RAP 里的 EML 全解:从语言定位到事务语义,再到真实案例的落地方式

摘要:EML(Entity Manipulation Language)是ABAP RAP模型的核心组件,作为ABAP的子集用于操作业务对象(BO)。它通过声明式语法(READ/MODIFY/EXECUTE/COMMIT)统一访问BO的行为与数据,并由RAP运行时自动处理校验、锁定、草稿管理等生命周期。EML将业务语义融入代码,确保与Fiori应用共享同一套校验逻辑,并通过FAILED/REPORTED/MAPPED管道传递错误与消息。其事务控制(IN LOCAL MODE与COMMIT ENTITIES)

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 528

XPath语法 在C#中使用XPath示例(转)

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

a4600646的博客 289

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

XPath语法在C#中使用XPath示例第二讲

XPath语法在C#中使用XPath示例 XPath可以快速定位到Xml中的节点或者属性。XPath语法很简单,但是强大够用,它也是使用xslt的基础知识。 示例Xml: ? <?xmlversion="1.0"encoding="utf-8"?> <pets> <catcolor="black"weight="1...

weixin_34323858的博客 140

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

上一篇: 关于SQL中查找字符串的总结 PATINDEX CHARINDEX 返回字符串中第N次出现指定字符串位置
下一篇: 从数据库中删除重复记录 SQL(MSSQL)
CB_CB
博客等级 码龄18年 13粉丝 2原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值