


XPath syntax: Specific code introduction to using XPath examples in C#
XPath can quickly locate nodes or attributes in Xml. XPath syntax is very simple, but powerful enough. It is also the basic knowledge for using xslt.
Example
| Example
| Example description
|
/
|
means starting from the root node to select |
/pets |
Select the root nodepet s |
represents the spacer between the node and the child node |
/pets/dog |
Select pets dognode under node |
||||
//xx |
means searching from the entire xml document regardless of the current node position
|
//price |
Select all pricenodes |
|||
. |
A single English half-width period indicates selecting the current node |
/pets/. |
Select petsNode |
|||
.. |
Double dots indicate selecting the parent node |
/pets/dog[0]/.. |
represents the pets node, which is the parent node of the first dog node |
|||
@xx |
means selecting attributes |
//dog/@color |
means selecting all dog nodes colorAttribute collection
|
|||
[…] |
The square brackets represent the selection conditions, and the brackets are the conditions |
//dog[@color ='white'] |
All color are white's dognodes |
|||
//dog[/price<100 ] | All dognodes | |||||
and other languages The array , array subscript starts from 1
| Node 1 The lastdog is the | |||||
|
| The single vertical bar represents the combination of merged nodes | //dog[@color='white'] | //cat[@color='white'] | colorThe dog node with the white attribute and the catnode | |||
| //dog/* | represents all child nodes of the dog node | ||||
//dog /@* | represents all attribute nodes of the dog node |
2.
pmeans Divide by, the mathematical division sign / here has been used as the separator between nodes
modmeans taking the remainder
3. XPath logical operator
=
equal to, equivalent to ==!=
in c# is not equal to
is greater than
>=is greater than or equal to
<is less than
<=is less than or equal to
andAnd with the relationship
oror or relationship
4. Appropriate, it is a set of keywords plus ::double colon to indicate a node or a group of nodes related to the current node.
Use the syntax: axisname::nodetest[predicate], that is, axis name::node name[get the node condition] The specific instructions are as follows:
Keywords
Description
|
Example
|
Example description
|
ancestor |
The parent node of the current node |
ancestor::pig |
The ancestor of the current node pignode
|
ancestor-or-self |
The current node and its parent node |
ancestor::pig |
|
|||
attribute |
All attributes of the current node |
attribute::weight |
is equivalent to @weight, attribute:: and @ are equivalent |
|||
child |
all byte points of the current node |
child: :*[name()!='price'] |
Select the child node whose name is not price |
|||
descendant |
Descendant nodes |
descendant::*[@*] |
Descendant nodes with attributes |
|||
descendant -or-self |
Descendant nodes and current node |
descendant-or-self::* |
|
|||
# |
#following |
##following
|
|
|||
|
following::* ######################## #### #######################following-sibling######################## #########目前節點的同父弟弟節點###### |
following-sibling:: |
|
|||
|
|
|
|
|||
文件中目前節點之前的所有節點
|
preceding::* |
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 p @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(); } } }
The above is the detailed content of XPath syntax: Specific code introduction to using XPath examples in C#. For more information, please follow other related articles on the PHP Chinese website!

Hot AI Tools

Undresser.AI Undress
AI-powered app for creating realistic nude photos

AI Clothes Remover
Online AI tool for removing clothes from photos.

Undress AI Tool
Undress images for free

Clothoff.io
AI clothes remover

Video Face Swap
Swap faces in any video effortlessly with our completely free AI face swap tool!

Hot Article

Hot Tools

Notepad++7.3.1
Easy-to-use and free code editor

SublimeText3 Chinese version
Chinese version, very easy to use

Zend Studio 13.0.1
Powerful PHP integrated development environment

Dreamweaver CS6
Visual web development tools

SublimeText3 Mac version
God-level code editing software (SublimeText3)

Hot Topics

Guide to Active Directory with C#. Here we discuss the introduction and how Active Directory works in C# along with the syntax and example.

Guide to C# Serialization. Here we discuss the introduction, steps of C# serialization object, working, and example respectively.

Guide to Random Number Generator in C#. Here we discuss how Random Number Generator work, concept of pseudo-random and secure numbers.

Guide to C# Data Grid View. Here we discuss the examples of how a data grid view can be loaded and exported from the SQL database or an excel file.

Guide to Factorial in C#. Here we discuss the introduction to factorial in c# along with different examples and code implementation.

Guide to Patterns in C#. Here we discuss the introduction and top 3 types of Patterns in C# along with its examples and code implementation.

Guide to Prime Numbers in C#. Here we discuss the introduction and examples of prime numbers in c# along with code implementation.

The difference between multithreading and asynchronous is that multithreading executes multiple threads at the same time, while asynchronously performs operations without blocking the current thread. Multithreading is used for compute-intensive tasks, while asynchronously is used for user interaction. The advantage of multi-threading is to improve computing performance, while the advantage of asynchronous is to not block UI threads. Choosing multithreading or asynchronous depends on the nature of the task: Computation-intensive tasks use multithreading, tasks that interact with external resources and need to keep UI responsiveness use asynchronous.
