Heim > Java > javaLernprogramm > Hauptteil

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

Mary-Kate Olsen
Freigeben: 2024-10-24 06:17:01
Original
764 Leute haben es durchsucht

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>
Nach dem Login kopieren

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>
Nach dem Login kopieren

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!

Quelle:php
Erklärung dieser Website
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
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage
Über uns Haftungsausschluss Sitemap
Chinesische PHP-Website:Online-PHP-Schulung für das Gemeinwohl,Helfen Sie PHP-Lernenden, sich schnell weiterzuentwickeln!