XPath는 Xml에서 노드나 속성을 빠르게 찾을 수 있습니다. XPath 구문은 매우 간단하지만 xslt를 사용하기 위한 기본 지식이기도 합니다.
예
1. XPath의 기호
기호
설명 |
예 |
예 |
|
||
은 루트 노드에서 선택하는 것을 의미합니다. |
/pets |
루트 노드 선택pets |
|||
은 노드와 하위 노드 사이의 구분 기호를 나타냅니다. |
/pets/dog |
pets 노드
노드를 선택합니다. > |
|||
//xx |
은 현재 노드 위치에 관계없이 전체 xml 문서에서 검색하는 것을 의미합니다. |
//가격 |
문서 >에서 모든 price 노드를 선택합니다. 단일 영어 반각 마침표는 현재 노드 |
/pets/. |
선택 애완동물노드 |
.. |
이중 점은 상위 노드 선택을 나타냅니다 |
/pets/dog[0]/..
|
은 첫 번째 dog 노드 pets 노드를 나타냅니다. > |
||
@xx
|
은 속성 선택을 의미합니다. |
//dog/@color
|
모든 dog 노드 color |
||
[…] |
대괄호 안은 선택 조건을 나타내고, 괄호 안의 조건은 |
//dog[@color='white'] |
모든 개 노드 | //개[/가격<100]||
값이 100 <🎜 미만인 모든 price 노드 > | c#|||||
배열의 배열 아래 첨자는 1 | 노드1개
| ||||
//개[last()] | 마지막 dog 노드인 last()는 xPath 내장 함수 <입니다. 🎜 > | ||||
|
| 단일 수직 막대는 병합된 노드의 조합을 나타냅니다 | //dog[@color='white'] | //cat[@color='white'] | color속성이 white인 dog 노드와 white 속성이 있는 cat<입니다. 🎜>색상 🎜>노드 | ||
* | 별표는 노드 또는 임의의 이름을 가진 속성 | //dog/*
| 은 dog 노드
| ||
//dog/@* | 은 dog 노드 | <🎜의 모든 속성 노드를 나타냅니다. >
키워드
|
설명
|
예
|
설명 예시
|
|
현재 노드의 상위 노드 |
조상::pig |
pig노드 |
자기 또는 자기
|
현재 노드와 상위 노드
|
조상::pig
|
|
속성
|
현재 노드의 모든 속성 |
속성::weight |
은 @weight와 동일합니다. 속성:: 및 @은 |
child
|
현재 노드의 모든 바이트 |
child::*[이름()!='가격']
|
이름이 price |
자손
|
하위 노드 |
descendant::*[@*]
|
속성이 있는 하위 노드 |
자손
|
하위 노드와 현재 노드 |
자손 또는 자기::* |
|
다음 |
Xml문서에서 현재 노드 뒤의 모든 노드 |
다음::* |
|
팔로우 형제 |
현재 노드와 같은 아버지, 남동생 노드 |
팔로우-형제::
|
|
선행 |
Xml문서에서 현재 노드 이전의 모든 노드
|
이전::* |
|
네임스페이스 |
현재 노드의 모든 네임스페이스 노드 선택 |
네임스페이스::* |
|
부모님 |
현재 노드의 상위 노드 |
parent: : |
은 이중 점.. 과 같습니다. |
선배
|
현재 노드 이후 동일한 아버지 및 형제 노드 |
선행 형제::* |
|
본인 |
현재 노드 |
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(); } } }
위 내용은 XPath 구문: C#에서 XPath 예제 사용에 대한 구체적인 코드 소개의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!