"일꾼이 일을 잘하려면 먼저 도구를 갈고 닦아야 한다." - 공자, 『논어』.
첫 장 > 프로그램 작성 > XPath를 사용하여 Java에서 네임스페이스로 XML을 쿼리하는 방법은 무엇입니까?

XPath를 사용하여 Java에서 네임스페이스로 XML을 쿼리하는 방법은 무엇입니까?

2024년 11월 10일에 게시됨
검색:506

How to Query XML with Namespaces in Java Using XPath?

XPath를 사용하여 Java에서 네임스페이스로 XML 쿼리

네임스페이스에 바인딩된 요소가 포함된 XML 문서로 작업할 때 XPath를 사용한 쿼리가 어려울 수 있습니다. 다음 예를 고려하십시오.

"/workbook/sheets/sheet[1]"과 같은 기본 "네임스페이스 없음" XPath 표현식을 사용하면 실패합니다. 이는 XML 문서의 요소가 XPath 표현식에서 고려되지 않는 네임스페이스에 바인딩되어 있기 때문입니다.

해결책 1: 네임스페이스 등록 및 네임스페이스 접두사 사용

권장되는 접근 방식은 네임스페이스 접두사를 사용하여 네임스페이스를 등록하여 XPath를 더 쉽게 읽고 유지 관리하는 것입니다.

NamespaceContext namespaceContext = new NamespaceContext() {
    @Override
    public String getNamespaceURI(String prefix) {
        if (prefix.equals("main")) {
            return "http://schemas.openxmlformats.org/spreadsheetml/2006/main";
        } else if (prefix.equals("r")) {
            return "http://schemas.openxmlformats.org/officeDocument/2006/relationships";
        }
        return null;
    }
};
XPathFactory xPathFactory = XPathFactory.newInstance();
XPath xPath = xPathFactory.newXPath();
xPath.setNamespaceContext(namespaceContext);

NodeList nodes = (NodeList) xPath.evaluate("/main:workbook/main:sheets/main:sheet[1]", document, XPathConstants.NODESET);

네임스페이스 접두사를 사용하면 XPath 표현식은 다음과 같습니다. "/main:workbook/main:sheets/main:sheet[1]" - 지정된 네임스페이스에 바인딩된 요소를 올바르게 처리합니다.

해결책 2: 일반 일치 및 조건자 필터

또는 요소에 대한 일반 일치와 원하는 local-name() 및 네임스페이스-uri()를 지정하는 조건자 필터를 사용하여 네임스페이스 접두사가 없는 XPath 표현식을 구성할 수 있습니다:

XPathFactory xPathFactory = XPathFactory.newInstance();
XPath xPath = xPathFactory.newXPath();

NodeList nodes = (NodeList) xPath.evaluate("/*[local-name()='workbook' and namespace-uri()='http://schemas.openxmlformats.org/spreadsheetml/2006/main']"  
        "/*[local-name()='sheets' and namespace-uri()='http://schemas.openxmlformats.org/spreadsheetml/2006/main']"  
        "/*[local-name()='sheet' and namespace-uri()='http://schemas.openxmlformats.org/spreadsheetml/2006/main'][1]",
        document, XPathConstants.NODESET);

이 방법은 장황하며 XML 문서에 혼합된 어휘가 있는 경우 위험을 초래할 수 있습니다.

결론

네임스페이스가 있는 XML 문서를 처리할 때 네임스페이스 바인딩을 고려하는 것이 중요합니다. 접두어로 네임스페이스를 등록하거나 일반 XPath 표현식을 주의 깊게 작성하면 정확하고 안정적인 쿼리를 수행할 수 있습니다.

최신 튜토리얼 더>

부인 성명: 제공된 모든 리소스는 부분적으로 인터넷에서 가져온 것입니다. 귀하의 저작권이나 기타 권리 및 이익이 침해된 경우 자세한 이유를 설명하고 저작권 또는 권리 및 이익에 대한 증거를 제공한 후 이메일([email protected])로 보내주십시오. 최대한 빨리 처리해 드리겠습니다.

Copyright© 2022 湘ICP备2022001581号-3