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

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

Linda Hamilton
Linda Hamilton원래의
2024-11-10 06:10:02377검색

How to Query XML with Namespaces using XPath in Java?

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

네임스페이스를 활용하는 XML로 작업할 때 네임스페이스를 무시하는 XPath 쿼리로 인해 잘못된 일치가 발생할 수 있습니다. XML 요소가 특정 네임스페이스에 바인딩된 시나리오에서는 XPath 표현식의 네임스페이스를 고려하는 것이 중요합니다.

명시적 네임스페이스 처리

선호되는 접근 방식은 네임스페이스 접두사를 선언하고 명시적으로 XPath 쿼리에서 이를 참조하세요. 이를 통해 코드 가독성과 유지 관리성이 향상됩니다. 예를 들면 다음과 같습니다.

NamespaceContext namespaceContext = new NamespaceContext();
namespaceContext.addNamespace("x", "http://schemas.example.com/x");
XPathFactory factory = XPathFactory.newInstance();
XPath xpath = factory.newXPath();
xpath.setNamespaceContext(namespaceContext);

NodeList nodes = (NodeList)xpath.evaluate("/x:workbook/x:sheets/x:sheet[1]", doc, XPathConstants.NODESET);

술어를 사용한 일반 요소 일치

또는 일반적으로 요소를 일치시키고 조건자를 사용하여 로컬 이름과 네임스페이스를 기반으로 결과를 필터링하는 XPath 표현식을 구성할 수 있습니다. -uri. 이 접근 방식은 장황할 수 있지만 더 많은 유연성을 허용합니다.

XPathFactory factory = XPathFactory.newInstance();
XPath xpath = factory.newXPath();

Item node = (Item)xpath.evaluate("//*[local-name()='workbook' and namespace-uri()='http://schemas.example.com/x']", doc, XPathConstants.NODE);

로컬 이름 일치

최후의 수단으로 로컬 이름만을 기준으로 요소를 일치시킬 수 있습니다. 네임스페이스. 그러나 이 접근 방식은 유사한 지역 이름을 가진 여러 어휘가 XML에 존재하는 시나리오에서 잘못된 요소를 일치시킬 위험이 있습니다.

XPathFactory factory = XPathFactory.newInstance();
XPath xpath = factory.newXPath();

Item node = (Item)xpath.evaluate("//*[local-name()='workbook']", doc, XPathConstants.NODE);

위 내용은 Java에서 XPath를 사용하여 네임스페이스로 XML을 쿼리하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.