Rumah > Java > javaTutorial > Bagaimana untuk Menjana Ekspresi XPath secara Program daripada Dokumen XML di Java?

Bagaimana untuk Menjana Ekspresi XPath secara Program daripada Dokumen XML di Java?

Patricia Arquette
Lepaskan: 2024-11-30 19:24:15
asal
174 orang telah melayarinya

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

Cara Menjana/Mendapatkan XPath daripada XML dalam Java

Pengenalan

Artikel ini akan memberikan panduan tentang mengekstrak ungkapan XPath daripada dokumen XML dalam Java . Ia meliputi proses merentasi nod XML, menyemak kewujudan atribut dan menjana rentetan XPath dengan sewajarnya.

Matlamat

Objektif kami adalah untuk menjana ungkapan XPath daripada dokumen XML berikut:

<root>
    <elemA>one</elemA>
    <elemA attribute1='first' attribute2='second'>two</elemA>
    <elemB>three</elemB>
    <elemA>four</elemA>
    <elemC>
        <elemB>five</elemB>
    </elemC>
</root>
Salin selepas log masuk

dan dapatkan XPath berikut ungkapan:

//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'
Salin selepas log masuk

Pelaksanaan

1. Melintasi Dokumen XML:

Gunakan pustaka penghuraian XML Java, seperti JDOM atau SAX, untuk menavigasi melalui nod XML.

2. Semak Kewujudan Atribut:

Untuk setiap nod, semak sama ada ia mempunyai sebarang atribut. Jika tidak, teruskan dengan penjanaan XPath.

3. Jana XPath untuk Nod dengan Atribut:

Untuk nod dengan atribut, buat ungkapan XPath untuk kedua-dua nod dan setiap atribut.

4. Gabungkan Ungkapan XPath:

Sambungkan ungkapan XPath yang dijana untuk nod dan atribut untuk mencipta rentetan XPath akhir. Contohnya:

String xpath = "//root[1]/elemA[1]='" + nodeValue + "'";
Salin selepas log masuk

5. Kendalikan Kes Khas:

Pertimbangkan kes khas seperti ruang dalam ungkapan XPath atau keperluan untuk menyertakan nilai atribut dalam petikan tunggal.

Contoh

Coretan kod berikut menunjukkan pelaksanaan dalam 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);
    }
}
Salin selepas log masuk

Kesimpulan

Mengikut langkah yang digariskan di atas, adalah mungkin untuk menjana ungkapan XPath secara pemrograman untuk dokumen XML dalam Java, menyediakan pendekatan automatik untuk mengekstrak data daripada kandungan XML.

Atas ialah kandungan terperinci Bagaimana untuk Menjana Ekspresi XPath secara Program daripada Dokumen XML di Java?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan