8.xpath(dom4j支持的jar)

it2022-05-06  11

1.使用dom4j支持xpath的操作(xpath可以直接获取到某个元素)

  (1)第一种形式

    /AAA/DDD/BBB:表示一层一层的,AAA下面DDD下面的BBB元素

  (2)第二种形式

    //BBB:表示获取所有元素名字是BBB的元素

  (3)第三种形式

    /*:获取所有的元素

  (4)第四种形式

    BBB[1]:表示获取第一个BBB元素

    BBB[last()]:表示获取最后一个BBB元素

  (5)第五种形式

    //BBB[@id]:表示获取所有名字是BBB并且元素上面有id属性的元素

  (6)第六种形式

    //BBB[@id='b1']:表示获取所有名字是BBB且元素上面有id属性的值b1

 

2.使用dom4j支持xpath具体操作

  (1)默认情况下,dom4j是不支持xpath的,如果我们要使用xpath,那么必须把包导入项目中

    包名:jaxen-1.1-beta-6.jar

    位置:我们解压后dom4j_jar包\dom4j-1.6.1\lib中

  (2)在dom4j里里面提供了两个方法,用来支持xpath

    selectNodes("xpath表达式") 并获取单个元素,返回一个Element

    selectSingNode("xpath表达式") 获取多个元素,返回一个list<Node>集合

 

3.下面是一个简单的查询实例

  需求:获取修改第一个name元素中的文本为老王

  xml文件如下

 

<?xml version="1.0" encoding="UTF-8"?> <persion> <one> <id>1001</id> <name>张三</name> <age>18</age> </one> <two> <id>1002</id> <name>李四</name> <age>20</age> </two> </persion>

 

 

 

  实现代码如下:

  

package Day4; import java.io.FileOutputStream; import org.dom4j.Document; import org.dom4j.Node; import org.dom4j.io.OutputFormat; import org.dom4j.io.SAXReader; import org.dom4j.io.XMLWriter; public class Demo1 { public static void main(String[] args) throws Exception { //获取解析器 SAXReader saxReader = new SAXReader(); //获取整个文档document Document document = saxReader.read("src/Day4/1.xml"); //直接获取第一个name元素 Node node = document.selectSingleNode("//name[1]"); //修改name元素的值为老王 node.setText("老王"); //更新xml文件 FileOutputStream writer = new FileOutputStream("src/Day4/1.xml"); OutputFormat format = OutputFormat.createPrettyPrint(); XMLWriter xmlWriter = new XMLWriter(writer, format); xmlWriter.write(document); xmlWriter.close(); } }

 

 

 

 

4.简化上面的代码

  可以把获取解析器和document封装

  可以把更新代码封装

  可以xml的相对地址封装(这样便于修改xml地址文件,这样写我们就不需要在实现带码中直接修改)

代码如下:

 

package Day4; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.IOException; import java.io.UnsupportedEncodingException; import org.dom4j.Document; import org.dom4j.DocumentException; import org.dom4j.Node; import org.dom4j.io.OutputFormat; import org.dom4j.io.SAXReader; import org.dom4j.io.XMLWriter; public class Demo2 { public static void main(String[] args) { //获取document Document document = GetDoument.getDocument(GetDoument.path); //直接获取第一个name元素 Node node = document.selectSingleNode("//name[1]"); //修改name元素的值为老王 node.setText("老王"); //更新xml文件 NewXml.newXml(document, GetDoument.path); } } //可以把获取解析器和document封装 class GetDoument{ //封装xml文件的相对地址 public static final String path = "src/Day4/1.xml"; public static Document getDocument(String path) { try { //获取解析器 SAXReader saxReader = new SAXReader(); //获取整个文档document Document document = saxReader.read(path); return document; } catch (DocumentException e) { e.printStackTrace(); } return null; } } //可以把更新代码封装 class NewXml{ public static void newXml(Document document,String path) { FileOutputStream writer; try { writer = new FileOutputStream(path); OutputFormat format = OutputFormat.createPrettyPrint(); XMLWriter xmlWriter = new XMLWriter(writer, format); xmlWriter.write(document); xmlWriter.close(); } catch (FileNotFoundException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (UnsupportedEncodingException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } }

 

转载于:https://www.cnblogs.com/zjdbk/p/9199527.html

相关资源:dom4j及xpath jar包

最新回复(0)