Heim >Java >javaLernprogramm >So verarbeiten Sie XML-Dokumente mit Standard-Namespaces in XPath mithilfe von Java
XPath-Verarbeitung von Dokumenten mit Standard-Namespaces
XPath-Verarbeitung von XML-Dokumenten unter Verwendung von Standard-Namespaces (solche ohne Präfixe) folgt den gleichen Prinzipien wie diese Wird für Dokumente mit definierten Präfixen verwendet.
NamespaceContext- und Präfixkonventionen
Für Dokumente, die qualifizierte Namespaces verwenden, kann während der XPath-Auswertung ein NamespaceContext implementiert werden. Dadurch können XPath-Fragmente entsprechend den Anforderungen des NamespaceContext vorangestellt werden. Insbesondere müssen die verwendeten Präfixe nicht mit denen im Originaldokument übereinstimmen.
Code-Implementierung
Unten finden Sie eine Beispiel-Code-Implementierung dieses Ansatzes:
<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>
Alternativer Ansatz
Darüber hinaus bietet das folgende Codefragment einen alternativen Ansatz, der näher an der ursprünglichen Abfrage liegt, aber dennoch den Standard-Namespace berücksichtigt:
<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>
Das obige ist der detaillierte Inhalt vonSo verarbeiten Sie XML-Dokumente mit Standard-Namespaces in XPath mithilfe von Java. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!