기본 네임스페이스가 있는 문서의 XPath 처리
기본 네임스페이스(접두사가 없는)를 활용하는 XML 문서의 XPath 처리는 다음과 동일한 원칙을 따릅니다. 정의된 접두사가 있는 문서에 사용됩니다.
NamespaceContext 및 접두사 규칙
정식 네임스페이스를 활용하는 문서의 경우 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>
대체 접근 방식
또한 다음 코드 조각은 원래 쿼리에 더 가깝지만 여전히 기본 네임스페이스를 고려하는 대체 접근 방식을 제공합니다.
<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>
위 내용은 Java를 사용하여 XPath에서 기본 네임스페이스를 사용하여 XML 문서를 처리하는 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!