search
  • Sign In
  • Sign Up
Password reset successful

Follow the proiects vou are interested in andi aet the latestnews about them taster

Table of Contents
Reprint: //m.sbmmt.com/
In c#, we often search and traverse nodes, this is what we can use XPath syntax,
Indicates selecting the color attribute set of all dog nodes
All dogs with the color white Node
2. XPath mathematical operators
3. XPath logical operator
XPath Axes
 
5. 常用的XPath函数介绍:
以上是XPath的语法,下面我们看下如何在.Net中使用XPath
如下代码示例展示了如何使用XPathDocument和XmlDocument
XPath使用示例,请看下面的代码注释 
Home Backend Development XML/RSS Tutorial xml learning (6) in c#Xpath example

xml learning (6) in c#Xpath example

Feb 23, 2017 pm 02:37 PM

Reprint: //m.sbmmt.com/

In c#, we often search and traverse nodes, this is what we can use XPath syntax, Example 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 syntax:


1. Symbols in XPath

Symbol Description/Select the dog node under the pets node/pets/dog[0 ]/..# #@xx//dog/@color[…]//dog[@color='white']The number in the square brackets is the node index, similar to the array in languages ​​​​such as C#, the array subscript starts from 1##| The single vertical bar indicates the combination of merged nodes//dog[@color='white'] | //cat[ @color='white']The asterisk represents a node or attribute with any name//dog/*

Example

Example description

means selecting from the root node
/pets

Select the root node pets

Represents the spacer between the node and the child node

/pets/dog

//xx

means searching from the entire xml document, regardless of the current node position
//price

Select all price nodes in the document

.

Single English A half-width period indicates selecting the current node
/pets/.

Selecting the pets node

..

##Double dot indicates selecting the parent node

represents the pets node, which is the parent node of the first dog node

represents the selection attribute

Indicates selecting the color attribute set of all dog nodes

中The brackets indicate the selection conditions, and the conditions inside the brackets are

All dogs with the color white Node

//dog[/price<100]

All dogs whose price byte point value is less than 100 Node

//dog[1]

The first dog node

//dog[ last()]

The last dog node, last() is the xPath built-in function

The dog node whose color attribute is white and the cat node whose color attribute is white

*

Represents all child nodes of the dog node

//dog/@*

Represents all attribute nodes of the dog node


2. XPath mathematical operators

+ The plus sign means adding

- means subtracting numbers

* means multiplying by

p means dividing by, where the mathematical division sign / has been used as a separator between nodes

mod means remainder

3. XPath logical operator

= equals, equivalent to ==

# in c

!= Not equal to

> Greater than

>= Greater than or equal to

< Less than

<= Less than or equal to

and and with the relationship

or or or the relationship

4. XPath Axes Literally translated this is XPath The meaning of axis, but according to my understanding, it is more appropriate to translate it into XPath node relationship operation keyword, which is a set of keywords plus :: double colon to indicate a node or a group of nodes that are related to the current node.

Use syntax: axisname::nodetest[predicate] That is, axis name::node name [get node condition]

The specific description is as follows:

##Quite For @weight, attribute:: and @ are equivalent childAll bytes of the current node Clickchild::*[name()!='price']Select the child node whose name is not pricedescendant Descendant Nodedescendant::*[@*] Descendant nodes with attributesdescendant-or-selfDescendant nodes and current nodesdescendant-or-self::* followingAll nodes after the current node in the Xml documentfollowing::*following-siblingThe same father and younger brother node of the current nodefollowing-sibling: :precedingAll nodes before the current node in the Xml documentpreceding::*##namespaceparentpreceding-siblingself


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(&quot;http://www.cnblogs.com/yukaizhao/rss&quot;);
//使用xPath选择需要的节点
XmlNodeList nodes = doc.SelectNodes(&quot;/rss/channel/item[position()&lt;=10]&quot;);
foreach (XmlNode item in nodes)
{
string title = item.SelectSingleNode(&quot;title&quot;).InnerText;
string url = item.SelectSingleNode(&quot;link&quot;).InnerText;
Console.WriteLine(&quot;{0} = {1}&quot;, title, url);
}
}
 
static void UseXPathWithXPathDocument()
{
XPathDocument doc = new XPathDocument(&quot;http://www.cnblogs.com/yukaizhao/rss&quot;);
XPathNavigator xPathNav = doc.CreateNavigator();
//使用xPath取rss中最新的10条随笔
XPathNodeIterator nodeIterator = xPathNav.Select(&quot;/rss/channel/item[position()&lt;=10]&quot;);
while (nodeIterator.MoveNext())
{
XPathNavigator itemNav = nodeIterator.Current;
string title = itemNav.SelectSingleNode(&quot;title&quot;).Value;
string url = itemNav.SelectSingleNode(&quot;link&quot;).Value;
Console.WriteLine(&quot;{0} = {1}&quot;,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 = @&quot;&lt;?xml version=&quot;&quot;1.0&quot;&quot; encoding=&quot;&quot;utf-8&quot;&quot; ?&gt;
&lt;pets&gt;
&lt;cat color=&quot;&quot;black&quot;&quot; weight=&quot;&quot;10&quot;&quot; count=&quot;&quot;4&quot;&quot;&gt;
&lt;price&gt;100&lt;/price&gt;
&lt;desc&gt;this is a black cat&lt;/desc&gt;
&lt;/cat&gt;
&lt;cat color=&quot;&quot;white&quot;&quot; weight=&quot;&quot;9&quot;&quot; count=&quot;&quot;5&quot;&quot;&gt;
&lt;price&gt;80&lt;/price&gt;
&lt;desc&gt;this is a white cat&lt;/desc&gt;
&lt;/cat&gt;
&lt;cat color=&quot;&quot;yellow&quot;&quot; weight=&quot;&quot;15&quot;&quot; count=&quot;&quot;1&quot;&quot;&gt;
&lt;price&gt;110&lt;/price&gt;
&lt;desc&gt;this is a yellow cat&lt;/desc&gt;
&lt;/cat&gt;
 
 
&lt;dog color=&quot;&quot;black&quot;&quot; weight=&quot;&quot;10&quot;&quot; count=&quot;&quot;7&quot;&quot;&gt;
&lt;price&gt;114&lt;/price&gt;
&lt;desc&gt;this is a black dog&lt;/desc&gt;
&lt;/dog&gt;
&lt;dog color=&quot;&quot;white&quot;&quot; weight=&quot;&quot;9&quot;&quot; count=&quot;&quot;4&quot;&quot;&gt;
&lt;price&gt;80&lt;/price&gt;
&lt;desc&gt;this is a white dog&lt;/desc&gt;
&lt;/dog&gt;
&lt;dog color=&quot;&quot;yellow&quot;&quot; weight=&quot;&quot;15&quot;&quot; count=&quot;&quot;15&quot;&quot;&gt;
&lt;price&gt;80&lt;/price&gt;
&lt;desc&gt;this is a yellow dog&lt;/desc&gt;
&lt;/dog&gt;
 
&lt;pig color=&quot;&quot;white&quot;&quot; weight=&quot;&quot;100&quot;&quot; count=&quot;&quot;2&quot;&quot;&gt;
&lt;price&gt;8000&lt;/price&gt;
&lt;desc&gt;this is a white pig&lt;/desc&gt;
&lt;/pig&gt;
&lt;/pets&gt;&quot;;
 
using (StringReader rdr = new StringReader(xml))
{
XmlDocument doc = new XmlDocument();
doc.Load(rdr);
 
//取所有pets节点下的dog字节点
XmlNodeList nodeListAllDog = doc.SelectNodes(&quot;/pets/dog&quot;);
 
//所有的price节点
XmlNodeList allPriceNodes = doc.SelectNodes(&quot;//price&quot;);
 
//取最后一个price节点
XmlNode lastPriceNode = doc.SelectSingleNode(&quot;//price[last()]&quot;);
 
//用双点号取price节点的父节点
XmlNode lastPriceParentNode = lastPriceNode.SelectSingleNode(&quot;..&quot;);
 
//选择weight*count=40的所有动物,使用通配符*
XmlNodeList nodeList = doc.SelectNodes(&quot;/pets/*[@weight*@count=40]&quot;);
 
//选择除了pig之外的所有动物,使用name()函数返回节点名字
XmlNodeList animalsExceptPigNodes = doc.SelectNodes(&quot;/pets/*[name() != &#39;pig&#39;]&quot;);
 
 
//选择价格大于100而不是pig的动物
XmlNodeList priceGreaterThan100s = doc.SelectNodes(&quot;/pets/*[price p @weight &gt;10 and name() != &#39;pig&#39;]&quot;);
foreach (XmlNode item in priceGreaterThan100s)
{
Console.WriteLine(item.OuterXml);
}
 
//选择第二个dog节点
XmlNode theSecondDogNode = doc.SelectSingleNode(&quot;//dog[position() = 2]&quot;);
 
//使用xpath ,axes 的 parent 取父节点
XmlNode parentNode = theSecondDogNode.SelectSingleNode(&quot;parent::*&quot;);
 
//使用xPath选择第二个dog节点前面的所有dog节点
XmlNodeList dogPresibling = theSecondDogNode.SelectNodes(&quot;preceding::dog&quot;);
 
//取文档的所有子孙节点price
XmlNodeList childrenNodes = doc.SelectNodes(&quot;descendant::price&quot;);
}
 
Console.Read();
}
}
}

 以上就是xml学习(6) 在c#Xpath实例的内容,更多相关内容请关注PHP中文网(m.sbmmt.com)! 


Statement of this Website
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn

Hot AI Tools

Undress AI Tool

Undress AI Tool

Undress images for free

AI Clothes Remover

AI Clothes Remover

Online AI tool for removing clothes from photos.

Undresser.AI Undress

Undresser.AI Undress

AI-powered app for creating realistic nude photos

ArtGPT

ArtGPT

AI image generator for creative art from text prompts.

Stock Market GPT

Stock Market GPT

AI powered investment research for smarter decisions

Popular tool

Notepad++7.3.1

Notepad++7.3.1

Easy-to-use and free code editor

SublimeText3 Chinese version

SublimeText3 Chinese version

Chinese version, very easy to use

Zend Studio 13.0.1

Zend Studio 13.0.1

Powerful PHP integrated development environment

Dreamweaver CS6

Dreamweaver CS6

Visual web development tools

SublimeText3 Mac version

SublimeText3 Mac version

God-level code editing software (SublimeText3)

How to conduct 'backtesting'? Check if your trading strategy works How to conduct 'backtesting'? Check if your trading strategy works Dec 04, 2025 pm 05:09 PM

Backtesting is the process of simulating a trading strategy through historical data and evaluating performance. 1. Use Python's Backtrader library, write the strategy class after installation, load OHLCV data and run the backtest engine to obtain the profit curve and transaction details; 2. Use PineScriptv5 to write the strategy in TradingView, render the signal in real time and calculate the winning rate and maximum return. Withdrawal and other indicators; 3. Use the QuantConnect platform to deploy C# or Python strategies, call preloaded data for cloud distributed backtesting, and automatically settle daily performance; 4. Manually backtest simple strategies through Excel, use formulas to simulate moving average crossovers or RSI signals, and calculate profit and loss and position changes line by line.

How to use a C   library in a C# or Python project? How to use a C library in a C# or Python project? Nov 25, 2025 am 05:35 AM

When using the C library, C# can call C-style DLL through P/Invoke or C/CLI, and Python can use pybind11, SWIG or ctypes to encapsulate C functions to achieve cross-language calling.

C# how to remove a character from a string C# how to remove a character from a string Oct 16, 2025 pm 01:53 PM

Use Remove() to delete characters by index, Replace() to remove all instances of a specified character, or use LINQ for conditional filter deletion. Since the string is immutable, a new string needs to be created.

What is the difference between an interface and an abstract class in C# What is the difference between an interface and an abstract class in C# Nov 09, 2025 am 05:47 AM

The interface defines what the object can do, supports multiple implementations, and is used for contracts between unrelated classes; 2. The abstract class defines what the object is and its common behaviors, single inheritance, can contain fields and constructors, and is suitable for related classes with common logic.

How to use a List in C# How to use a List in C# Oct 23, 2025 am 02:55 AM

List is a dynamically resizable strongly typed collection in C#. It is located under the System.Collections.Generic namespace and supports adding, deleting, accessing and operating elements of the same type. It can be operated through Add, Remove, index access and traversal, and provides common methods such as Count, Contains and Sort, which is suitable for scenarios that require flexible management of data sequences.

How to read a CSV file in C# How to read a CSV file in C# Nov 10, 2025 am 01:49 AM

Answer: To read CSV files, you can use File.ReadAllLines combined with Split to process simple files, or use CsvHelper and TextFieldParser to deal with complex formats. 1. Simple scenario: Use File.ReadAllLines to read lines and split fields with Split(','); 2. Complex scenario: Recommend the CsvHelper library, which supports object mapping and special format parsing; 3. Built-in solution: use Microsoft.VisualBasic.FileIO.TextFieldParser to correctly handle edge cases such as commas within quotation marks; 4. Pay attention to exception handling and data verification.

How to work with XML files in Visual Studio Code? How to work with XML files in Visual Studio Code? Oct 15, 2025 am 01:33 AM

Install RedHat's XML extension to get syntax highlighting, formatting and intelligent sensing; 2. Enable formatting, automatic tag closing and configure XSD/DTF validation in the settings; 3. Right-click and use "Format Document" to clean up the structure and get tag suggestions through Ctrl Space; 4. If necessary, manually associate .config and other files as XML types in the status bar for efficient editing.

C# read appsettings.json C# read appsettings.json Oct 30, 2025 am 04:55 AM

First introduce the Microsoft.Extensions.Configuration related package, then create the appsettings.json file in the project root directory and set the copy attribute, then use ConfigurationBuilder to load the configuration file, read the key value or connection string through the IConfiguration interface, and finally bind the configuration section to a strongly typed class to achieve type-safe access.

Related articles

Keywords

Description

Example

Example description

ancestor

The parent node of the current node

ancestor:: pig

The pig node among the ancestor nodes of the current node

##ancestor-or-self

Current node and its parent node

ancestor::pig

attribute

All attributes of the current node

attribute::weight

Select all namespace nodes of the current node

namespace::*

The parent node of the current node

parent::

is equivalent to a double point..

The same father and brother node after the current node

preceding-sibling::*

Current node

self::*

is equivalent to a single point.