Heim > Java > javaLernprogramm > Hauptteil

Wie gehe ich mit XML-Dokumenten mit Standard-Namespace um, wenn XPath verwendet wird?

Patricia Arquette
Freigeben: 2024-10-24 06:23:01
Original
833 Leute haben es durchsucht

How to Handle XML Documents with Default Namespace When Using XPath?

Verwenden von XPath für XML-Dokumente mit Standard-Namespace

Beim Umgang mit XML-Dokumenten, die einen Standard-Namespace verwenden, kann das Fehlen eines Präfixes problematisch sein XPath-Manipulation schwierig. Auch wenn das Setzen der Eigenschaft „namespaceAware“ auf „false“ wie eine Lösung erscheinen mag, hat sie doch ihre Grenzen.

Um solche Dokumente effektiv zu manipulieren, muss man Folgendes berücksichtigen:

Verwendung eines Namespace-Kontexts

Beim Arbeiten mit Namespace-qualifizierten Dokumenten kann während der XPath-Auswertung ein NamespaceContext verwendet werden. In diesem Kontext können Sie Präfixe für Namespace-URIs angeben. Während die im Kontext verwendeten Präfixe nicht mit denen im Dokument übereinstimmen müssen, müssen die Fragmente im XPath entsprechend vorangestellt werden.

Betrachten Sie beispielsweise den folgenden Code:

<code class="java">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

Hinweis:Der XPath-Ausdruck „/ns:root/ns:author“ verwendet Präfixe, die mit dem NamespaceContext konsistent sind.

Alternativer Ansatz

In einigen Fällen Der folgende Ansatz könnte ebenfalls effektiv sein:

<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

Hinweis: Bei diesem Ansatz wird davon ausgegangen, dass der Standard-Namespace nicht an anderer Stelle im Dokument verwendet wird.

Das obige ist der detaillierte Inhalt vonWie gehe ich mit XML-Dokumenten mit Standard-Namespace um, wenn XPath verwendet wird?. 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!