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.
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>
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'
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 + "'";
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.
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); } }
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!