XPath 문법 이 C\#에서 XPath 를 사용 하 는 예 시 를 분석 합 니 다.

10575 단어 C#XPath 문법
XPath 는 Xml 의 노드 나 속성 을 빠르게 찾 을 수 있 습 니 다.XPath 문법 은 간단 하지만 강력 하여 xslt 를 사용 하 는 기초 지식 이기 도 합 니 다.예시 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 의 문법: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();
        }
    }
}
을 보십시오.

좋은 웹페이지 즐겨찾기