xpath ist eine Sprache zum Auffinden von Informationen in XML-Dokumenten. xpath wird zum Navigieren durch Elemente und Attribute in XML-Dokumenten verwendet. Sein Rückgabewert kann Knoten, Knotensammlungen, Text und eine Mischung aus Knoten und Text usw. sein.
Bevor Sie dieses Dokument studieren, sollten Sie über ein gewisses Verständnis von XML-Knoten, Elementen, Attributen, Text, Verarbeitungsanweisungen, Kommentaren, Stammknoten, Namespaces und Knotenbeziehungen sowie xpath verfügen.
XML-Lernadresse: http://www.runoob.com/xml/xml-tutorial.html
XPath-Grundsyntax-Lernadresse: http://www.runoob.com/xpath/xpath-tutorial.html
Offizielles XPath-Dokument: https://yunpan.cn/cvc4tEIGy5EvS Zugriffskennwort 9d16
In diesem Artikel wird hauptsächlich Folgendes vorgestellt: Verwendung der XPath-Operation zum Betreiben von XML in Java.
1) Erstens, wie man die XPath-Technologie in dom4j verwendet
Importieren Sie das von xPath unterstützte JAR-Paket. jaxen-1.1-beta-6.jar (Importieren Sie zuerst das dom4j-Paket, dom4j-Download-Adresse: http://www.dom4j.org/dom4j-1.6.1/).
Wie im Bild nach Anleitung des Pakets gezeigt:
Wenn Sie nicht wissen, wie Sie das Paket importieren, lesen Sie bitte meinen vorherigen Blog: Zusammenfassung zum Abrufen von XML-Knoten in Java und zum Lesen von XML-Dokumentknoten
2) Es gibt zwei Hauptmethoden zur Verwendung der XPath-Methode in Java Point:
List
Node selectSingleNode("xpath expression"); Fragen Sie ein Knotenobjekt ab
Das Folgende verwendet Beispiele, um die Verwendung zu veranschaulichen.
1. So verwenden Sie selectNodes:
package com.vastsum.demo; import java.io.File; import java.io.FileOutputStream; import java.util.List; import org.dom4j.Document; import org.dom4j.Element; import org.dom4j.Node; import org.dom4j.io.OutputFormat; import org.dom4j.io.SAXReader; import org.dom4j.io.XMLWriter; /** * * @author shutu008 *selectNode的使用方法 */ public class xpathDemo { public static void main(String[] args) throws Exception { Document doc = new SAXReader().read(new File("./src/contact.xml")); /** * @param xpath 表示xpath语法变量 */ String xpath=""; /** * 1. / 绝对路径 表示从xml的根位置开始或子元素(一个层次结构) */ xpath = "/contactList"; xpath = "/contactList/contact"; /** * 2. // 相对路径 表示不分任何层次结构的选择元素。 */ xpath = "//contact/name"; xpath = "//name"; /** * 3. * 通配符 表示匹配所有元素 */ xpath = "/contactList/*"; //根标签contactList下的所有子标签 xpath = "/contactList//*";//根标签contactList下的所有标签(不分层次结构) /** * 4. [] 条件 表示选择什么条件下的元素 */ //带有id属性的contact标签 xpath = "//contact[@id]"; //第二个的contact标签 xpath = "//contact[2]"; //选择最后一个contact标签 xpath = "//contact[last()]"; /** * 5. @ 属性 表示选择属性节点 */ xpath = "//@id"; //选择id属性节点对象,返回的是Attribute对象 xpath = "//contact[not(@id)]";//选择不包含id属性的contact标签节点 xpath = "//contact[@id='002']";//选择id属性值为002的contact标签 xpath = "//contact[@id='001' and @name='eric']";//选择id属性值为001,且name属性为eric的contact标签 /** *6. text() 表示选择文本内容 */ //选择name标签下的文本内容,返回Text对象 xpath = "//name/text()"; xpath = "//contact/name[text()='张三']";//选择姓名为张三的name标签 List<Node> list = doc.selectNodes(xpath); for (Node node : list) { System.out.println(node); } //写出xml文件 //输出位置 FileOutputStream out = new FileOutputStream("d:/contact.xml"); //指定格式 OutputFormat format = OutputFormat.createPrettyPrint(); format.setEncoding("utf-8"); XMLWriter writer = new XMLWriter(out,format); //写出内容 writer.write(doc); //关闭资源 writer.close(); } }
2. So verwenden Sie selectSingleNode
package com.vastsum.demo; import java.io.File; import java.util.Iterator; import org.dom4j.Attribute; import org.dom4j.Document; import org.dom4j.Element; import org.dom4j.io.SAXReader; /** * * @author shutu008 *selectSingleNode的使用 */ public class xpathDemo1{ public static void main(String[] args) throws Exception{ //读取XML文件,获得document对象 SAXReader saxReader = new SAXReader(); Document doc = saxReader.read(new File("./src/contact.xml")); //使用xpath获取某个节点 String xpath = ""; //对contact元素 id="001"的节点,操作 xpath = "//contact[@id = '001']"; Element contactElem = (Element)doc.selectSingleNode(xpath); //设置这个节点的属性值 contactElem.addAttribute("name", "001"); //输出这个节点的所有属性值 for(Iterator it = contactElem.attributeIterator();it.hasNext();){ Attribute conAttr = (Attribute)it.next(); String conTxt = conAttr.getValue(); String conAttrName = conAttr.getName(); System.out.println(conAttrName+" = "+conTxt); } } }