> Java > java지도 시간 > 본문

기본 네임스페이스가 있는 XML 문서에서 XPath를 언제 사용해야 합니까?

Mary-Kate Olsen
풀어 주다: 2024-10-24 06:57:42
원래의
892명이 탐색했습니다.

When to Use XPath on XML Documents with a Default Namespace?

기본 네임스페이스가 있는 XML 문서에서 XPath 사용

기본 네임스페이스가 있고 접두사가 없는 XML 문서를 조작할 때 XPath를 사용할 수 있습니다. 네임스페이스 URI가 없으면 마치 네임스페이스가 없는 것처럼 보입니다. 그러나 DocumentBuilderFactory의 네임스페이스Aware 속성을 false로 설정하는 것만으로는 충분하지 않을 수도 있습니다.

이러한 문서에서 XPath를 성공적으로 사용하려면 XPath를 실행할 때 NamespaceContext를 사용할 수 있습니다. 여기에는 NamespaceContext와 일치하도록 XPath 조각의 접두사를 지정하는 작업이 포함됩니다. 사용된 접두사는 문서의 접두사와 일치할 필요가 없습니다.

다음은 이 접근 방식을 통합하는 업데이트된 코드 버전입니다.

<code class="java">import java.util.Iterator;
import javax.xml.namespace.NamespaceContext;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.xpath.XPath;
import javax.xml.xpath.XPathConstants;
import javax.xml.xpath.XPathFactory;
import org.w3c.dom.Document;
import org.w3c.dom.NodeList;

public class Demo {

    public static void main(String[] args) {
        DocumentBuilderFactory domFactory = DocumentBuilderFactory.newInstance();
        domFactory.setNamespaceAware(true);
        try {
            DocumentBuilder builder = domFactory.newDocumentBuilder();
            Document dDoc = builder.parse("E:/test.xml");

            XPath xPath = XPathFactory.newInstance().newXPath();
            xPath.setNamespaceContext(new MyNamespaceContext());
            NodeList nl = (NodeList) xPath.evaluate("/ns:root/ns:author", dDoc, XPathConstants.NODESET);
            System.out.println(nl.getLength());
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    private static class MyNamespaceContext implements NamespaceContext {

        public String getNamespaceURI(String prefix) {
            if("ns".equals(prefix)) {
                return "http://www.mydomain.com/schema";
            }
            return null;
        }

        public String getPrefix(String namespaceURI) {
            return null;
        }

        public Iterator getPrefixes(String namespaceURI) {
            return null;
        }

    }

}</code>
로그인 후 복사

XPath 표현식도 수정되었습니다. , Dennis의 제안에 따라.

또는 다음과 같은 단순화된 코드 조각도 작동할 수 있습니다.

<code class="java">import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.xpath.XPath;
import javax.xml.xpath.XPathConstants;
import javax.xml.xpath.XPathFactory;

import org.w3c.dom.Document;
import org.w3c.dom.NodeList;

public class Demo {

    public static void main(String[] args) {
        DocumentBuilderFactory domFactory = DocumentBuilderFactory.newInstance();
        try {
            DocumentBuilder builder = domFactory.newDocumentBuilder();
            Document dDoc = builder.parse("E:/test.xml");

            XPath xPath = XPathFactory.newInstance().newXPath();
            NodeList nl = (NodeList) xPath.evaluate("/root/author", dDoc, XPathConstants.NODESET);
            System.out.println(nl.getLength());
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

}</code>
로그인 후 복사

위 내용은 기본 네임스페이스가 있는 XML 문서에서 XPath를 언제 사용해야 합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:php
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
저자별 최신 기사
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿
회사 소개 부인 성명 Sitemap
PHP 중국어 웹사이트:공공복지 온라인 PHP 교육,PHP 학습자의 빠른 성장을 도와주세요!