source

XPath - 노드()와 텍스트()의 차이

ittop 2023. 10. 4. 22:56
반응형

XPath - 노드()와 텍스트()의 차이

하는 데 을 겪고 .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()다다)처럼 보임)와 일치합니다.<?name value?>).
  • 사이드 노트: The*만 일치합니다.attribute축.@*의 줄임말입니다.attribute::*이 . 의 .child축이*를 선택하지 않습니다.

XML 문서:

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

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

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

XPath의 경우:

  • /합니다를(를) 선택합니다.
  • /produce우)소라는 루트 노드의 요소를 합니다."produce"를 문서 요소라고 하며, 문서 자체를 나타냅니다.문서 요소와 루트 노드는 종종 혼동되지만 동일한 것은 아닙니다.)
  • /produce/node()아래에서 하위 노드 유형을 선택합니다./produce/(즉, 7명의 자녀 모두)
  • /produce/text()공백 전용 텍스트 노드 4개(!)를 선택합니다.
  • /produce/item[1]이름이 지정된 첫 번째 자식 요소를 선택합니다."item"
  • /produce/item[1]/text()모든 하위 텍스트 노드를 선택합니다(이 경우 "apple" - 하나만 있음).

뭐 이런 거.

그래서, 당신의 질문들은

  • "생산중인 모든 품목의 텍스트 선택" /produce/item/text()(3개 노드 선택)
  • "모든 부서의 모든 관리자 노드 선택" //department/manager(1개 노드 선택)

메모들

  • XPath의 기본 축은childaxis. 다른 축 이름 앞에 붙여 축을 변경할 수 있습니다.예를 들어,//item/ancestor::produce
  • 요소 노드에 텍스트 값이 있습니다.요소 노드를 평가하면 요소 노드의 텍스트 내용이 반환됩니다.이 예시의 경우,/produce/item[1]/text()그리고.string(/produce/item[1])똑같을 겁니다.
  • XPath 식의 각 부분을 그래픽으로 설명하는 이 답변도 참조하십시오.

저는 이 시나리오에 직면했을 때 큰 차이가 있었습니다(여기 제 이야기:).

<?xml version="1.0" encoding="UTF-8"?>
<sentence id="S1.6">When U937 cells were infected with HIV-1, 
        
    <xcope id="X1.6.3">
        <cue ref="X1.6.3" type="negation">no</cue> 
                        
                        induction of NF-KB factor was detected
        
    </xcope>
                    
, whereas high level of progeny virions was produced, 
        
    <xcope id="X1.6.2">
        <cue ref="X1.6.2" type="speculation">suggesting</cue> that this factor was 
        <xcope id="X1.6.1">
            <cue ref="X1.6.1" type="negation">not</cue> required for viral replication
        </xcope>
    </xcope>.

</sentence>

태그 사이에 텍스트를 추출하고 내부 태그에 포함된 텍스트를 집계(concat)해야 했습니다.

/node()그 일을 한 반면에./text()반쪽짜리 일을 한

/text()내부 태그가 "텍스트 노드"가 아니기 때문에 내부 태그에 포함되지 않은 텍스트만 반환했습니다."추가 xpath에서 내부 태그에 포함된 텍스트를 추출하면 된다"고 생각할 수 있지만 내부 태그에서 집계된 텍스트를 어디에 배치해야 할지 모르기 때문에 원래 순서대로 텍스트를 정렬하는 것이 어려워집니다. 내부 노드에서 집계된 텍스트를 어디에 배치해야 할지 모르기 때문입니다.

  1. U937 세포가 HIV-1에 감염되었을 때
  2. NF-KB 인자 유도가 감지되지 않았습니다.
  3. , 높은 수준의 자손 바이러스가 생성된 반면,
  4. 이 요소가 바이러스 복제에 필요하지 않다는 것을 암시하는 것.
  5. .

./node()제가 원하는 대로 해줬어요. 왜냐하면 내부 태그에서도 텍스트를 받기 때문이에요.

언급URL : https://stackoverflow.com/questions/11744465/xpath-difference-between-node-and-text

반응형