기본 네임스페이스가 있는 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 중국어 웹사이트의 기타 관련 기사를 참조하세요!