programing

XPath-node ()와 text ()의 차이점

nasanasas 2020. 12. 15. 19:24
반응형

XPath-node ()와 text ()의 차이점


text()의 차이점을 이해하는 데 문제가 node()있습니다. 내가 이해에서 text()태그 사이에 무엇이든 될 것 <item>apple</item>입니다 애플 이 경우이다. 노드는 실제로 그 노드가 무엇이든 될 것 입니다.

하지만 "생산중인 모든 항목의 텍스트를 선택하십시오"라는 질문과 "모든 부서의 모든 관리자 노드 선택"이라는 별도의 질문이있는 작업이 할당되었습니다.

출력은보기에 가정되는 방법 text()에 반대node()

XML 스 니펫 :

<produce>
 <item>apple</item>
 <item>banana</item>
 <item>pepper</item>
</produce>

<department>
 <phone>123-456-7891</phone>
 <manager>John</manager>
</department>

물론 더 많은 부서와 관리자가 있지만 이것은 코드의 일부일뿐입니다.

어떤 도움이라도 대단히 감사하겠습니다!


text()하고 node()있는 노드 테스트 의 XPath 용어 ( 비교 ).

노드 테스트는 노드 집합 ( 정확히 에서)에서 작동하며 특정 유형의 노드를 반환합니다. 축이 언급되지 않은 경우 child기본적으로 축이 사용됩니다.

모든 종류의 노드 테스트가 있습니다 .

  • node()모든 노드 와 일치 합니다 ( 모든 노드 중 최소 특정 노드 테스트).
  • text()텍스트 노드 만 일치
  • comment()주석 노드 와 일치
  • *모든 요소 노드 와 일치
  • foo 이름이 지정된 모든 요소 노드와 일치 "foo"
  • processing-instruction()PI 노드와 일치합니다 (예 :) <?name value?>.
  • 참고 :*애트리뷰트 노드와도 일치하지만 attribute축을 따라서 만 일치합니다 . @*attribute::*. 속성은 child축의 일부가 아니므 로 법선 *속성을 선택하지 않습니다.

이 XML 문서 :

<produce>
    <item>apple</item>
    <item>banana</item>
    <item>pepper</item>
</produce>

다음 DOM (간체)을 나타냅니다.

루트 노드
   요소 노드 (name = "produce")
      텍스트 노드 (값 = "\ n")
      요소 노드 (name = "item")
         텍스트 노드 (value = "apple")
      텍스트 노드 (값 = "\ n")
      요소 노드 (name = "item")
         텍스트 노드 (value = "banana")
      텍스트 노드 (값 = "\ n")
      요소 노드 (name = "item")
         텍스트 노드 (value = "pepper")
      텍스트 노드 (값 = "\ n")

따라서 XPath를 사용하면 :

  • / 루트 노드를 선택
  • /produce selects a child element of the root node if it has the name "produce" (This is called the document element; it represents the document itself. Document element and root node are often confused, but they are not the same thing.)
  • /produce/node() selects any type of child node beneath /produce/ (i.e. all 7 children)
  • /produce/text() selects the 4 (!) whitespace-only text nodes
  • /produce/item[1] selects the first child element named "item"
  • /produce/item[1]/text() selects all child text nodes (there's only one - "apple" - in this case)

And so on.

So, your questions

  • "Select the text of all items under produce" /produce/item/text() (3 nodes selected)
  • "Select all the manager nodes in all departments" //department/manager (1 node selected)

Notes

  • The default axis in XPath is the child axis. You can change the axis by prefixing a different axis name. For example: //item/ancestor::produce
  • Element nodes have text values. When you evaluate an element node, its textual contents will be returned. In case of this example, /produce/item[1]/text() and string(/produce/item[1]) will be the same.
  • Also see this answer where I outline the individual parts of an XPath expression graphically.

Select the text of all items under produce:

//produce/item/text()

Select all the manager nodes in all departments:

//department/*

ReferenceURL : https://stackoverflow.com/questions/11744465/xpath-difference-between-node-and-text

반응형