Heim  >  Artikel  >  Java  >  So verarbeiten Sie XML-Dokumente mit Standard-Namespaces in XPath mithilfe von Java

So verarbeiten Sie XML-Dokumente mit Standard-Namespaces in XPath mithilfe von Java

Mary-Kate Olsen
Mary-Kate OlsenOriginal
2024-10-24 06:17:01755Durchsuche

How to Process XML Documents with Default Namespaces in XPath using 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!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn