programing

XPath: 자식 노드에서 부모 노드 가져오기

powerit 2023. 10. 20. 14:50
반응형

XPath: 자식 노드에서 부모 노드 가져오기

자식 노드에 대한 부모 노드를 가져와야 합니다.title 50

지금은 내가 사용하는 것만

//*[title="50"]

어떻게 하면 부모를 얻을 수 있을까요?결과는 다음과 같습니다.store마디마디


<?xml version="1.0" encoding="utf-8"?>
<d:data xmlns:d="defiant-namespace" d:mi="23">
    <store d:mi="22">
        <book price="12.99" d:price="Number" d:mi="4">
            <title d:constr="String" d:mi="1">Sword of Honour</title>
            <category d:constr="String" d:mi="2">fiction</category>
            <author d:constr="String" d:mi="3">Evelyn Waugh</author>
        </book>
        <book price="8.99" d:price="Number" d:mi="9">
            <title d:constr="String" d:mi="5">Moby Dick</title>
            <category d:constr="String" d:mi="6">fiction</category>
            <author d:constr="String" d:mi="7">Herman Melville</author>
            <isbn d:constr="String" d:mi="8">0-553-21311-3</isbn>
        </book>
        <book price="8.95" d:price="Number" d:mi="13">
            <title d:constr="String" d:mi="10">50</title>
            <category d:constr="String" d:mi="11">reference</category>
            <author d:constr="String" d:mi="12">Nigel Rees</author>
        </book>
        <book price="22.99" d:price="Number" d:mi="18">
            <title d:constr="String" d:mi="14">The Lord of the Rings</title>
            <category d:constr="String" d:mi="15">fiction</category>
            <author d:constr="String" d:mi="16">J. R. R. Tolkien</author>
            <isbn d:constr="String" d:mi="17">0-395-19395-8</isbn>
        </book>
        <bicycle price="19.95" d:price="Number" d:mi="21">
            <brand d:constr="String" d:mi="19">Cannondale</brand>
            <color d:constr="String" d:mi="20">red</color>
        </bicycle>
    </store>
</d:data>

상위 노드의 이름과 함께 을 사용합니다.

//*[title="50"]/parent::store

이 XPath는 상위 노드가 다음과 같은 경우에만 선택합니다.store.

하지만 이것들 중 하나를 사용할 수도 있습니다.

//*[title="50"]/parent::*
//*[title="50"]/..

이 xpath는 부모 노드를 선택합니다.따라서 문서가 변경되면 원하는 노드가 아니더라도 항상 노드를 선택하게 됩니다.

편집

부모가 자전거이고 부모가 상점인 경우 해당 예에서 어떤 일이 발생합니까?

올라가나요?

아니요, 일치하는 노드의 상위인 경우에만 스토어를 선택합니다.//*[title="50"].

만약 그렇지 않다면, 그러한 경우에 오르고 그러한 부모가 없다면 None을 반환할 방법이 있습니까?

예, 사용 가능합니다.ancestor축들

//*[title="50"]/ancestor::store

노드 일치의 모든 조상을 선택합니다.//*[title="50"]그것은 '가게'입니다.예.

<data xmlns:d="defiant-namespace" d:mi="23">
    <store mi="1">
        <store mi="22">
            <book price="8.95" d:price="Number" d:mi="13">
                <title d:constr="String" d:mi="10">50</title>
                <category d:constr="String" d:mi="11">reference</category>
                <author d:constr="String" d:mi="12">Nigel Rees</author>
            </book>
        </store>
    </store>
</data>

XPath selection result

다른 방법으로 사용할 수 있습니다.ancestor.

//*[title="50"]/ancestor::store

그것은 보다 더 강력합니다.parent왜냐하면 그것은 심지어 조부모나 위대한 조부모까지도 얻을 수 있기 때문입니다.

오래되고 자주 묻는 질문에 대한 새롭고 개선된 답변...

어떻게 하면 부모를 얻을 수 있을까요?결과는 다음과 같습니다.store마디마디

다음보다 술어를 사용합니다.parent::아니면ancestor::축.

여기서 대부분의 답변은 다음을 선택합니다.title그런 다음 대상 상위 또는 상위까지 이동합니다(store) 요소.더 단순하고 직접적인 접근법은 처음부터 상위 또는 상위 요소를 직접 선택하여 이동할 필요를 없애는 것입니다.parent::아니면ancestor::축:

//*[book/title = "50"]

개입 요소의 이름이 다를 경우:

//*[*/title = "50"]

또는 이름과 깊이에서:

//*[.//title = "50"]

표현의 끝에 있는 두 점도 사용할 수 있습니다.다음 예를 참조하십시오.

//*[title="50"]/..
    //store[book[title[text()="50"]]]

아니면

    //store[*[title[text()="50"]]]

언급URL : https://stackoverflow.com/questions/28237694/xpath-get-parent-node-from-child-node

반응형