XPath 문법 이 C\#에서 XPath 를 사용 하 는 예 시 를 분석 합 니 다.
<?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]
첫 번 째 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 나 누 기 나머지 3 을 나타 낸다.XPath 논리 연산 자= c\#에 해당 하 는=== 같 지 않다 보다 크다 보다 크 면< 보다 작다 이하 그리고 관계 또는 관계 4.XPath Axes 는 글자 로 이것 이 XPath 축 이라는 뜻 을 번역 하지만 제 가 이해 하기 로 는 이것 을 XPath 노드 관계 연산 키워드 로 번역 하 는 것 이 더 적합 합 니 다.바로 하나의 키 워드 를 더 한 것 입 니 다.더 블 콜론 은 현재 노드 와 관계 가 있 는 하나 또는 한 개의 노드 를 표시 합 니 다.사용 문법:axiname: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()은 현재 노드 이름/sets/*[name()!='pig']표시/pets 아래 이름 은 pig 의 하위 노드 가 아 닙 니 다.
XPath 의 함 수 는 문자열 함수,디지털 함수 와 시간 함수 등 을 포함 하여 w3 사 이 트 를 참고 할 수 있 습 니 다.
이상 은 XPath 의 문법 입 니 다.다음은.Net 에서 XPath 를 어떻게 사용 하 는 지 보 겠 습 니 다.
.Net 에 서 는 XPath Document 나 XmlDocument 류 를 통 해 XPath 를 사용 할 수 있 습 니 다.XPath Document 는 읽 기 전용 으로 Xml 노드 나 속성 텍스트 등 을 찾 고 XmlDocument 는 읽 기 및 쓰기 가 가능 합 니 다.
다음 코드 예제 에 서 는 XPath Document 와 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("https://www.jb51.net");
// 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("https://www.jb51.net");
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();
}
}
}
을 보십시오.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
WebView2를 Visual Studio 2017 Express에서 사용할 수 있을 때까지Evergreen .Net Framework SDK 4.8 VisualStudio2017에서 NuGet을 사용하기 때문에 패키지 관리 방법을 packages.config 대신 PackageReference를 사용해야...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.