Cet article fournira des conseils sur l'extraction d'expressions XPath à partir d'un document XML en Java . Il couvre le processus de traversée des nœuds XML, de vérification de l'existence des attributs et de génération de chaînes XPath en conséquence.
Notre objectif est de générer des expressions XPath à partir du document XML suivant :
<root> <elemA>one</elemA> <elemA attribute1='first' attribute2='second'>two</elemA> <elemB>three</elemB> <elemA>four</elemA> <elemC> <elemB>five</elemB> </elemC> </root>
et obtenez le XPath suivant expressions :
//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. Parcourez le document XML :
Utilisez une bibliothèque d'analyse XML Java, telle que JDOM ou SAX, pour naviguer dans les nœuds XML.
2. Vérifiez l'existence des attributs :
Pour chaque nœud, vérifiez s'il possède des attributs. Sinon, procédez à la génération XPath.
3. Générez XPath pour les nœuds avec des attributs :
Pour les nœuds avec des attributs, créez des expressions XPath pour le nœud et chaque attribut.
4. Combinez des expressions XPath :
Concaténez les expressions XPath générées pour le nœud et les attributs pour créer la chaîne XPath finale. Par exemple :
String xpath = "//root[1]/elemA[1]='" + nodeValue + "'";
5. Gérer les cas particuliers :
Considérez les cas particuliers tels que les espaces dans les expressions XPath ou la nécessité de placer les valeurs d'attribut entre guillemets simples.
L'extrait de code suivant démontre la mise en œuvre dans 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); } }
En suivant les étapes décrites ci-dessus, il est possible de générer par programme des expressions XPath pour les documents XML en Java, fournissant ainsi une approche automatisée pour extraire des données du contenu XML.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!