Heim > Java > javaLernprogramm > Wie generiert man programmgesteuert XPath-Ausdrücke aus einem XML-Dokument in Java?

Wie generiert man programmgesteuert XPath-Ausdrücke aus einem XML-Dokument in Java?

Patricia Arquette
Freigeben: 2024-11-30 19:24:15
Original
180 Leute haben es durchsucht

How to Programmatically Generate XPath Expressions from an XML Document in Java?

So generieren/erhalten Sie XPath aus XML in Java

Einführung

Dieser Artikel enthält Anleitungen zum Extrahieren von XPath-Ausdrücken aus einem XML-Dokument in Java . Es behandelt den Prozess des Durchlaufens von XML-Knoten, der Prüfung auf Attributexistenz und der entsprechenden Generierung von XPath-Strings.

Ziel

Unser Ziel ist es, XPath-Ausdrücke aus dem folgenden XML-Dokument zu generieren:

<root>
    <elemA>one</elemA>
    <elemA attribute1='first' attribute2='second'>two</elemA>
    <elemB>three</elemB>
    <elemA>four</elemA>
    <elemC>
        <elemB>five</elemB>
    </elemC>
</root>
Nach dem Login kopieren

und erhalten Sie den folgenden XPath Ausdrücke:

//root[1]/elemA[1]='one'
//root[1]/elemA[2]='two'
//root[1]/elemA[2][@attribute1='first']
//root[1]/elemA[2][@attribute2='second']
//root[1]/elemB[1]='three'
//root[1]/elemA[3]='four'
//root[1]/elemC[1]/elemB[1]='five'
Nach dem Login kopieren

Implementierung

1. Durchlaufen Sie das XML-Dokument:

Verwenden Sie eine Java-XML-Parsing-Bibliothek wie JDOM oder SAX, um durch die XML-Knoten zu navigieren.

2. Auf Vorhandensein von Attributen prüfen:

Überprüfen Sie für jeden Knoten, ob er über Attribute verfügt. Wenn nicht, fahren Sie mit der XPath-Generierung fort.

3. Generieren Sie XPath für Knoten mit Attributen:

Erstellen Sie für Knoten mit Attributen XPath-Ausdrücke sowohl für den Knoten als auch für jedes Attribut.

4. Kombinieren Sie XPath-Ausdrücke:

Verketten Sie die für den Knoten und die Attribute generierten XPath-Ausdrücke, um die endgültige XPath-Zeichenfolge zu erstellen. Zum Beispiel:

String xpath = "//root[1]/elemA[1]='" + nodeValue + "'";
Nach dem Login kopieren

5. Sonderfälle behandeln:

Berücksichtigen Sie Sonderfälle wie Leerzeichen in XPath-Ausdrücken oder die Notwendigkeit, Attributwerte in einfache Anführungszeichen zu setzen.

Beispiel

Der folgende Codeausschnitt demonstriert die Umsetzung in Java:

import java.io.File;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;

import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.ParserConfigurationException;

import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.NamedNodeMap;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;
import org.xml.sax.SAXException;

public class GenerateXPath {

    public static void main(String[] args) throws SAXException, IOException, ParserConfigurationException {
        // Read the XML file
        File xmlFile = new File("path_to_xml.xml");
        DocumentBuilderFactory dbFactory = DocumentBuilderFactory.newInstance();
        DocumentBuilder dBuilder = dbFactory.newDocumentBuilder();
        Document doc = dBuilder.parse(xmlFile);

        // Traverse the XML nodes
        NodeList nodes = doc.getElementsByTagName("*");
        for (int i = 0; i < nodes.getLength(); i++) {
            Node node = nodes.item(i);

            // Check for attribute existence
            if (node.getAttributes().getLength() == 0) {
                // Generate XPath for nodes without attributes
                String xpath = generateXPath(node);
                System.out.println(xpath);
            } else {
                // Generate XPath for nodes with attributes
                xpath = generateXPathWithAttributes(node);
                System.out.println(xpath);
            }
        }
    }

    private static String generateXPath(Node node) {
        String xpath = "";

        // Append tag name
        xpath += "/" + node.getNodeName();

        // Append position index
        NodeList siblings = node.getParentNode().getChildNodes();
        int position = 1;
        for (int i = 0; i < siblings.getLength(); i++) {
            if (siblings.item(i).getNodeName().equals(node.getNodeName())) {
                position++;
            }
        }
        xpath += "[" + position + "]";

        return xpath;
    }

    private static String generateXPathWithAttributes(Node node) {
        List<String> xpathParts = new ArrayList<>();

        // Append tag name
        xpathParts.add("/" + node.getNodeName());

        // Append position index
        NodeList siblings = node.getParentNode().getChildNodes();
        int position = 1;
        for (int i = 0; i < siblings.getLength(); i++) {
            if (siblings.item(i).getNodeName().equals(node.getNodeName())) {
                position++;
            }
        }
        xpathParts.add("[" + position + "]");

        // Append attributes
        NamedNodeMap attributes = node.getAttributes();
        for (int i = 0; i < attributes.getLength(); i++) {
            Node attribute = attributes.item(i);
            xpathParts.add("[@" + attribute.getNodeName() + "='" + attribute.getNodeValue() + "']");
        }

        return String.join("", xpathParts);
    }
}
Nach dem Login kopieren

Fazit

Wenn Sie die oben beschriebenen Schritte befolgen, ist es möglich, XPath-Ausdrücke für XML-Dokumente in Java programmgesteuert zu generieren und so einen automatisierten Ansatz zum Extrahieren von Daten aus XML-Inhalten bereitzustellen.

Das obige ist der detaillierte Inhalt vonWie generiert man programmgesteuert XPath-Ausdrücke aus einem XML-Dokument in Java?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
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