//dog[/pricef5f9b2d2af66cf466fa2cdeabf35012f 보다 큼
>= 크거나 같음
< 작음
<= 작거나 같음 and 및 관계
or or or 관계
4. XPath Axes 직역하면 다음과 같습니다. XPath 축의 의미이지만 제가 이해한 바에 따르면 이를 XPath 노드 관계 작업 키워드로 번역하는 것이 더 적절합니다. 이는 키워드 집합에 관련 노드 중 하나 또는 그룹을 나타내는 :: 이중 콜론을 더한 것입니다. 현재 노드 사용 구문: 축 이름::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::* |
相当于单点. |
지침 |
예 |
설명 예시 |
상위 td> |
현재 노드의 상위 노드 |
조상: :pig |
현재 노드의 조상 노드에 있는 pig 노드 |
조상 또는 자기현재 노드 및 해당 조상 노드 |
조상::돼지 |
|
속성 |
모든 속성 현재 노드 |
속성::weight |
은 @weight와 동일하고 attribute:: 및 @는 |
child |
현재 노드의 모든 바이트 포인트 |
child::*[name()!='price'] |
이름이 가격이 아닌 하위 노드 선택 |
하위 항목 |
하위 노드 |
descendant::*[@*] |
속성이 있는 하위 노드 |
자손 또는 자기 |
하위 노드 및 현재 노드 |
descendant- or-self::* |
|
다음 |
Xml 문서에서 현재 노드 뒤의 모든 노드 |
다음::* td> |
|
following-sibling td> |
현재 노드와 같은 아버지와 남동생 노드 |
다음- 형제:: |
|
이전 |
이전의 모든 노드 Xml 문서의 현재 노드 |
이전:* |
|
네임스페이스 |
현재 노드의 모든 네임스페이스 노드 선택 |
namespace::* |
|
부모 |
현재 노드의 상위 노드 | 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();
}
}
} 以上就是xml学习(6) 在c#Xpath实例的内容,更多相关内容请关注PHP中文网(www.php.cn)!
|