javascript 빠른 시작 26--XPath

10157 단어 JavaScript
XPath 소개
XPath는 XML 문서에서 정보를 찾는 언어입니다.XPath는 XML 문서에서 요소 및 속성을 이동하는 데 사용됩니다.XPath는 W3C XSLT 표준의 주요 요소이며 XQuery와 XPointer는 동시에 XPath 표현 위에 구축되었다.따라서 XPath에 대한 이해는 많은 고급 XML 응용의 기초이다.사실 우리는 낯설지 않다. XPath와 가장 비슷한 것이 바로 CSS의 선택기이다.CSS에서는 CSS 선택부호를 사용하여 요소를 선택하여 스타일을 적용하고 XSLT에서는 XPath를 사용합니다. XPath는 CSS 선택기와 같이 강력합니다!다음은 CSS 선택자와 XPath 선택자의 몇 가지 대조입니다.
    //CSS   
    body p  //    body   p  
    body>p //  body    p
    * //       
    //     XPath   
    body//p
    body/p
    *

 
이 XPath 표현의 의미는 아직 알 수 없지만 CSS 선택부호와 매우 비슷하다는 것을 알 수 있습니다!그러나 XPath는 바디 요소의 구체적인 위치에서 p를 찾을 수 있거나 전 N개의 p를 선택할 수 있는 더 강한 부분이 있다.
    body/p[position()=4]  //  XPath      body     4 p  ,     1    
    body/p[position()<3]  //   body       p  

 
XPath는 경로 표현식을 사용하여 XML 문서의 노드 또는 노드 세트를 선택합니다.이러한 경로 표현식은 우리가 일반적인 컴퓨터 파일 시스템에서 본 표현식과 매우 비슷하다.또한 XPath에는 100개 이상의 내장 함수가 포함되어 있습니다.이 함수들은 문자열 값, 수치, 날짜와 시간 비교, 노드와 QName 처리, 서열 처리, 논리 값 등에 사용된다.
XPath 쓰기
XPath는 경로 표현식을 사용하여 XML 문서에서 노드를 선택합니다.노드는 경로 (path) 또는 단계 (step)를 따라 선택됩니다."/"는 문서 노드를 나타냅니다.현재 노드현재 노드의 부모 노드를 나타낸다.예:
    {  XPath        ,           !
    / {      ,nodeType 9
    /root {       ,          (Unix), /           
    /root/child/.. {     root    child    (  root)

 
다음은 자주 사용하는 경로 표현식들입니다
  • nodeName 이름이 nodeName인 노드 선택
  • /루트에서 선택
  • //원소의 후손 원소를 선택하면 nodeName
  • 을 따라가야 합니다
  • . 현재 노드 선택
  • .. 현재 노드의 모 노드 선택
  • @속성 노드 선택(@은attribute의 줄임말)
  •     <?xml version="1.0"?>
        <root>
            <child attr="attr" />
            <child>
                <a><desc /></a>
            </child>
        </root>
        {     XML   XPath  ,     document
        /root  {  root
        root {  root
        child { ,  child  document    
        //child {    child  ,//    
        //@attr {  attr    
        /root/child//desc {  child     desc

     
    서술어
    술어는 노드를 찾을 때 더욱 상세한 정보를 제공하는 데 사용되며 술어는 방괄호에 박혀 있다.다음은 서술어가 있는 XPath 표현식입니다.
        /root/child[3] {  root      child   ,  ,         , 1    
        //child[@attr] {        attr child  
        //child[@attr="val"]/desc {      attr   val child      desc
        //child[desc] {      desc    child
        //child[position()>3]  {position() XPath      ,       
        //child[@attr>12] {XPath            ,       attr     12 child  
        //child[last()] {last()             ,           child  

     
    와일드카드
    XPath 와일드카드를 사용하여 알 수 없는 XML 요소를 선택할 수 있습니다.
  • *, CSS의 선택부호와 마찬가지로 모든 요소 노드와 일치
  • @*, 모든 속성 노드 일치
  • node(), 모든 종류의 노드와 일치
  •     /root/* {             
        /root/node() {            ,      
        //* {         
        //child[@*] {         child  
        //@*  {         

     
    조합 경로
    CSS에서 쉼표 조합을 사용하여 여러 개의 선택자를 사용하는 것과 같이 XPath는 "|"를 사용하여 여러 경로를 조합하는 문법을 지원합니다!
        /root | /root/child {     root        child
        //child | //desc {     child   desc  

     
    XPath 연산자
    XPath 표현식에 사용할 수 있는 연산자는 다음과 같습니다.
  • |, 2개의 노드 세트 계산
  • +, 덧셈
  • -, 뺄셈
  • *, 곱셈
  • div, 제법, 이미 경로부호가 되었기 때문에 제법 표지로 사용할 수 없음
  • mod, 나머지
  • =, 같음
  • != ,같지 않음
  • <, 작음
  • <=, 작거나 같음
  • >, 보다 큼
  • >=, 크거나 같음
  • or 또는
  • and, 및
  • XPath 축
    축은 현재 노드에 상대적인 노드 세트를 정의합니다.다음 사용 가능한 축 이름 및 해당 결과:
  • ancestor 현재 노드의 모든 선배(아버지, 할아버지 등)
  • 선택
  • ancestor-or-self는 현재 노드의 모든 선배(부, 할아버지 등)와 현재 노드 자체
  • 를 선택한다.
  • attribute 현재 노드의 모든 속성 선택
  • child는 현재 노드의 모든 하위 요소를 선택합니다.
  • descendant는 현재 노드의 모든 후손 요소(자, 손 등)를 선택합니다.
  • descendant-or-self는 현재 노드의 모든 후손 요소(자, 손 등)와 현재 노드 자체를 선택한다.
  • following은 문서에서 현재 노드의 끝 태그 뒤에 있는 모든 노드를 선택합니다.
  • namespace 현재 노드의 모든 명명 공간 노드 선택
  • parent는 현재 노드의 모 노드를 선택합니다.
  • preceding은 문서에서 현재 노드의 시작 탭 앞에 있는 모든 노드를 선택합니다.
  • preceding-sibling은 현재 노드 이전의 모든 동급 노드를 선택합니다.
  • self는 현재 노드를 선택합니다.

  • 사실상 완전한 XPath 표현식은'/'와'보'로 구성되고 보는'축','노드 테스트'와'술어'로 구성된다.다음과 같습니다.
    	step/step/.....  {  XPath   
    	{step   
    	   ::    [  ]

    일반적인 XPath 표현식에서 술어가 없으면 다른 조건의 제한이 없고 축의 이름이 없으면 기본적으로child를 사용합니다.예를 들어 "abc"와 "child:::abc"는 같은 효과가 있고, 다음은 축 이름을 사용하는 것과 같은 간단한 XPath 표현식입니다.
  • child::abc ------------------------- abc (하위 요소 abc)
  • root/attribute::id------------root/@id(root의 속성 id)
  • selft::node() ------------------ .(자체)
  • parent::node() --------------- ..(상위 노드)
  • child:::* ----------------------* (하위 요소)
  • child::text () ------------------text () (하위 텍스트 노드)
  • descendant::tag ------------ .//tag(후대 tag 요소)


  • XPath는 포지션과last가 함수인 것과 같은 함수 라이브러리도 포함하는데 일반적인 함수는 술어에 사용되고 XSLT와 XQuery에서는 더욱 광범위하게 사용된다.
    브라우저의 XPath
    IE 브라우저는 XPath에 대한 구현이 비교적 간단합니다.하나의 XMLDOM 대상(그리고 모든 노드)에는 selectSingleNode와selectNodes 방법이 있고 XPath 표현식에 전송되며,selectNodes는 일치하는 노드 목록을 되돌려주고,selectSingleNode는 목록의 첫 번째 항목만 되돌려줍니다!
        var xmlDom = getXMLDOM();//           XML DOM    
        loadXMLFile(xmlDom,"text.xml");
        var root = xmlDom.selectSingleNode("/*");//       
        root = xmlDom.selectNodes("/*")[0];//  
        var lastChild = xmlDom.selectSingleNode("/*/*[last()]");

     
    Mozilla는 DOM 표준에 따라 XPath를 지원합니다.DOM Level 3 추가 표준 DOM Level 3 XPath는 DOM에서 XPath 표현식을 계산하는 데 사용되는 인터페이스를 정의합니다.유감스럽게도, 이 표준은 마이크로소프트의 직관적인 방식보다 훨씬 복잡하다.
    XPath와 관련된 대상이 많지만 가장 중요한 두 가지는 XPath Evaluator와 XPath Result이다.XPathEvaluator는 메서드 evaluate()를 사용하여 XPath 표현식을 계산합니다.
    evaluate () 방법은 다섯 가지 인자가 있는데 그것이 바로 XPath 표현식, 상하문 노드, 명명 공간 해석 프로그램과 되돌아오는 결과의 유형이며, 동시에 XPath Result에 결과를 저장합니다. (보통null)
    명명 공간 해석 프로그램은 XML 코드가 XML 명명 공간을 사용할 때만 필요하기 때문에 보통 비어 null로 설정합니다.결과를 반환하는 유형은 다음 10개의 상수 값 중 하나일 수 있습니다.
     
  • XPathResult.ANY_TYPE - XPath 표현식 유형에 맞는 데이터 반환
  • XPathResult.ANY_UNORDERED_NODE_TYPE - 일치하는 노드의 노드 집합을 반환하지만 문서의 노드 순서와 일치하지 않을 수 있음
  • XPathResult.BOOLEAN_TYPE - 부울 값 반환
  • XPathResult.FIRST_ORDERED_NODE_TYPE - 한 노드만 포함하는 노드 집합을 되돌려줍니다. 이 노드는 문서에서 첫 번째로 일치하는 노드입니다.
  • XPathResult.NUMBER_TYPE – 숫자 값 반환
  • XPathResult.ORDERED_NODE_ITERATOR_TYPE - 문서에 노드가 나타나는 순서대로 일치하는 노드의 노드 집합을 반환합니다.가장 일반적인 결과 유형
  • XPathResult.ORDERED_NODE_SNAPSHOT_TYPE - 노드 컬렉션 스냅샷을 반환하여 문서 외부에서 노드를 캡처합니다. 그러면 나중에 문서에 대한 수정 사항이 노드 목록에 영향을 주지 않습니다.노드 집합의 노드는 문서에 나타나는 순서와 같다
  • XPathResult.STRING_TYPE - 반환 문자열 값
  • XPathResult.UNORDERED_NODE_ITERATOR_TYPE - 일치하는 노드의 노드 집합을 되돌려줍니다. 그러나 문서에 나타나는 노드의 순서에 따라 배열되지 않을 수도 있습니다
  • XPathResult.UNORDERED_NODE_SNAPSHOT_TYPE - 노드 컬렉션 스냅샷을 반환하여 문서 외부에서 노드를 캡처합니다. 그러면 나중에 문서에 대한 수정 사항이 노드 목록에 영향을 주지 않습니다.노드 집합 중의 노드와 문서의 원래 순서는 반드시 같지 않다.

  • 다음은 ORDEREDNODE_ITERATOR_TYPE의 예:
        var xmlDom = getXMLDOM();//           XML DOM    
        loadXMLFile(xmlDom,"text.xml");
        var evaluator = new XPathEvaluator();
        var result =evaluator.evaluate("/root",xmlDom,null,XPathResult.ORDERED_NODE_ITERATOR_TYPE,null);
        var node;
        if (result) {//       null
            while(node=result.iterateNext()) {//        iterateNext    
                alert(node.tagName);
            }
        }

    좋은 웹페이지 즐겨찾기