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.
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>
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'
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 + "'";
5. Kendalikan Kes Khas:
Pertimbangkan kes khas seperti ruang dalam ungkapan XPath atau keperluan untuk menyertakan nilai atribut dalam petikan tunggal.
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); } }
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!