수색…


비고

XPath 표현식은 XML 트리 문서에서 특정 요소 나 속성 노드를 선택하는 것과 같은 하나 이상의 노드를 탐색하고 선택하는 데 사용됩니다.

이 언어에 대한 참조는 W3C 권장 사항 을 참조하십시오.

XML 문서에서 NodeList 평가하기

주어진 다음 XML 문서 :

<documentation>
    <tags>
        <tag name="Java">
            <topic name="Regular expressions">
                <example>Matching groups</example>
                <example>Escaping metacharacters</example>
            </topic>
            <topic name="Arrays">
                <example>Looping over arrays</example>
                <example>Converting an array to a list</example>
            </topic>
        </tag>
        <tag name="Android">
            <topic name="Building Android projects">
                <example>Building an Android application using Gradle</example>
                <example>Building an Android application using Maven</example>
            </topic>
            <topic name="Layout resources">
                <example>Including layout resources</example>
                <example>Supporting multiple device screens</example>
            </topic>
        </tag>
    </tags>
</documentation>

다음은 Java 태그에 대한 모든 example 노드를 검색합니다 (XML에서 XPath 만 평가하는 경우이 방법 사용, 여러 XML 호출이 동일한 XML 파일에서 평가되는 경우 다른 예제 참조).

XPathFactory xPathFactory = XPathFactory.newInstance();
XPath xPath = xPathFactory.newXPath(); //Make new XPath
InputSource inputSource = new InputSource("path/to/xml.xml"); //Specify XML file path

NodeList javaExampleNodes = (NodeList) xPath.evaluate("/documentation/tags/tag[@name='Java']//example", inputSource, XPathConstants.NODESET); //Evaluate the XPath
...

단일 XML로 여러 XPath 표현식 파싱하기

XML 문서에서 NodeList평가하는 것과 같은 예제를 사용하면 다음과 같이 여러 XPath 호출을 효율적으로 수행 할 수 있습니다.

주어진 다음 XML 문서 :

<documentation>
    <tags>
        <tag name="Java">
            <topic name="Regular expressions">
                <example>Matching groups</example>
                <example>Escaping metacharacters</example>
            </topic>
            <topic name="Arrays">
                <example>Looping over arrays</example>
                <example>Converting an array to a list</example>
            </topic>
        </tag>
        <tag name="Android">
            <topic name="Building Android projects">
                <example>Building an Android application using Gradle</example>
                <example>Building an Android application using Maven</example>
            </topic>
            <topic name="Layout resources">
                <example>Including layout resources</example>
                <example>Supporting multiple device screens</example>
            </topic>
        </tag>
    </tags>
</documentation>

XPath를 사용하여 하나의 문서에서 여러 표현식을 평가하는 방법입니다.

XPath xPath = XPathFactory.newInstance().newXPath(); //Make new XPath
DocumentBuilder builder = DocumentBuilderFactory.newInstance();
Document doc = builder.parse(new File("path/to/xml.xml")); //Specify XML file path

NodeList javaExampleNodes = (NodeList) xPath.evaluate("/documentation/tags/tag[@name='Java']//example", doc, XPathConstants.NODESET); //Evaluate the XPath
xPath.reset(); //Resets the xPath so it can be used again
NodeList androidExampleNodes = (NodeList) xPath.evaluate("/documentation/tags/tag[@name='Android']//example", doc, XPathConstants.NODESET); //Evaluate the XPath

...

단일 XPath 식을 XML로 여러 번 파싱하기

이 경우, 각 호출 할 수 있도록 평가하기 전에 컴파일 된 표현을 갖고 싶어 evaluate 하지 않습니다 compile 같은 표현을. 간단한 구문은 다음과 같습니다.

XPath xPath = XPathFactory.newInstance().newXPath(); //Make new XPath
XPathExpression exp = xPath.compile("/documentation/tags/tag[@name='Java']//example");
DocumentBuilder builder = DocumentBuilderFactory.newInstance();
Document doc = builder.parse(new File("path/to/xml.xml")); //Specify XML file path

NodeList javaExampleNodes = (NodeList) exp.evaluate(doc, XPathConstants.NODESET); //Evaluate the XPath from the already-compiled expression

NodeList javaExampleNodes2 = (NodeList) exp.evaluate(doc, XPathConstants.NODESET); //Do it again

전반적으로 XPathExpression.evaluate() 두 번 호출은 XPath.evaluate() 두 번 호출보다 훨씬 효율적입니다.



Modified text is an extract of the original Stack Overflow Documentation
아래 라이선스 CC BY-SA 3.0
와 제휴하지 않음 Stack Overflow