首页 > 其他分享 >dom4j 的一些用法

dom4j 的一些用法

时间:2023-06-04 15:32:54浏览次数:38  
标签:node dom4j 元素 用法 book bookstore 一些 节点


[b][color=red]使用 domj4 API 创建与修改 XML 文档[/color][/b][url]http://www.blogjava.net/tojava/archive/2005/12/20/24862.html[/url]
[color=red]dom4j修改xml文件[/color] [url]http://lengchaotian.iteye.com/blog/1873658[/url]
用dom4j修改xml(增加修改节点)[url]http://bjyzxxds.iteye.com/blog/477226[/url]
dom4j修改节点属性及写入文件 [url]http://blog.163.com/sir_876/blog/static/1170522320107741950123/[/url]

maven:

<dependency>
            <groupId>dom4j</groupId>
            <artifactId>dom4j</artifactId>
            <version>1.6.1</version>
        </dependency>
        <dependency>
            <groupId>jaxen</groupId>
            <artifactId>jaxen</artifactId>
            <version>1.1.6</version>
        </dependency>




[color=red][b]Dom4j-XPath语法[/b][/color]


首先给出一段XML格式文本信息:


<?xml version="1.0" encoding="ISO-8859-1"?>


<bookstore>


<book>


<title lang="eng">Harry Potter</title>


<price>29.99</price>


</book>


<book>


<title lang="eng">Learning XML</title>


<price>39.95</price>


</book>


</bookstore>



表达式 描述


节点名 选择所有该名称的节点集


[color=darkblue]/ 选择根节点


// 选择当前节点下的所有节点


. 选择当前节点


.. 选择父节点


@ 选择属性


示例


表达式 描述


bookstore 选择所有bookstore子节点


/bookstore 选择根节点bookstore


bookstore/book 在bookstore的子节点中选择所有名为book的节点


//book 选择xml文档中所有名为book的节点


bookstore//book 选择节点bookstore下的所有名为book为节点


//@lang 选择所有名为lang的属性


断言


在方括号中[],用来更进一步定位选择的元素


表达式 描述


/bookstore/book[1] 选择根元素bookstore的book子元素中的第一个(注意: IE5以上浏览器中第一个元素是0)


/bookstore/book[last()] 选择根元素bookstore的book子元素中的最后一个


/bookstore/book[last()-1] 选择根元素bookstore的book子元素中的最后第二个


/bookstore/book[position()<3] 选择根元素bookstore的book子元素中的前两个


//title[@lang] 选择所有拥有属性lang的titile元素


//title[@lang='eng'] 选择所有属性值lang为eng的title元素


/bookstore/book[price>35.00] 选择根元素bookstore的book子元素中那些拥有price子元素且值大于35的


/bookstore/book[price>35.00]/title 选择根元素bookstore的book子元素中那些拥有price子元素且值大于35的title子元素


选择位置的节点


通配符 描述


* 匹配所有元素


@* 匹配所有属性节点


node() 匹配任何类型的节点


示例


表达式 描述


/bookstore/* 选择根元素bookstore的下的所有子元素


//* 选择文档中所有元素


//title[@*] 选择所有拥有属性的title元素


使用操作符“|”组合选择符合多个path的表达式[/color]


xpath读取


private void getAllNodes(String xml) {
        try {
            Document authtmp = DocumentHelper.parseText(xml);
            List<Element> list = authtmp.selectNodes("//sms/node");
            for (int j = 0; j < list.size(); j++) {
                Element node = (Element) list.get(j);
                nodeByNodes(node);
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    private void nodeByNodes(Element node) {
        if (node.element("node") != null) {
            String id = node.attributeValue("id");
            String name = node.attributeValue("name");
            System.out.print(id + "-------");
            System.out.println(name);
            for (Iterator i = node.elementIterator("node"); i.hasNext();) {
                Element newNode = (Element) i.next();
                nodeByNodes(newNode);
            }
        } else {
            String id = node.attributeValue("id");
            String name = node.attributeValue("name");
            System.out.print(id + "-------");
            System.out.println(name);
        }
    }




dom4j中文乱码


[url]http://blog.sina.com.cn/s/blog_3d25e30f0100cyzi.html[/url]


org.dom4j.io.XMLWriter xmlWriter = new org.dom4j.io.XMLWriter(


new [color=darkblue]FileOutputStream[/color](fileName));



dom4j读写xml文件


[url]http://www.blogjava.net/biiau/archive/2012/08/17/231005.html[/url]



写入


import java.io.FileWriter;  
import java.io.IOException;  

import org.dom4j.Document;  
import org.dom4j.DocumentHelper;  
import org.dom4j.Element;  
import org.dom4j.io.OutputFormat;  
import org.dom4j.io.XMLWriter;  

public class DWriter {  

    public static void main(String[] args) {  
        // TODO Auto-generated method stub  
        try {  
            XMLWriter writer = new XMLWriter(new FileWriter("src/author.xml"));  
            Document doc = createDoc();  
            writer.write(doc);  
            writer.close();  

            // Pretty print the document to System.out  
            // 设置了打印的格式,将读出到控制台的格式进行美化  
            OutputFormat format = OutputFormat.createPrettyPrint();  
            writer = new XMLWriter(System.out, format);  
            writer.write(doc);  

        } catch (IOException e) {  
            // TODO Auto-generated catch block  
            e.printStackTrace();  
        }  
    }  

    public static Document createDoc() {  
        Document doc = DocumentHelper.createDocument();  
        Element root = doc.addElement("root");  
        Element author1 = root.addElement("author").addAttribute("name",  
                "Kree").addAttribute("location", "UK")  
                .addText("Kree Strachan");  
        Element author2 = root.addElement("author").addAttribute("name", "King")  
                .addAttribute("location", "US").addText("King McWrirter");  
        return doc;  
    }  
}



格式化代码:


OutputFormat format = OutputFormat.createPrettyPrint();  
writer = new XMLWriter(new FileWriter(filepath), format);

标签:node,dom4j,元素,用法,book,bookstore,一些,节点
From: https://blog.51cto.com/u_3871599/6410788

相关文章

  • JBPM5的一些概念
    [color=darkblue][b]人工任务分三部分[/b][/color]:1.运行一项[b][color=red]任务服务器[/color][/b],不仅启动了TaskServer,同时还加载了如群组,用户等数据。2.启动一个[color=red][b]流程实例[/b][/color],这个类的功能是启动一个流程实例。3.[color=red][b]......
  • SQL Server 日期格式转换(Convert用法)
    [color=red][b]有时间的记得要:datetime[/b][/color]SelectCONVERT(varchar(100),CONVERT(datetime,'2012-08-0117:41:54',120),120)SQLServer中,Convert可以将日期转换成不同格式,格式控制是由CONVERT(data_type[(length)],expression[,style])中的style来完成的。下面......
  • Pytorch torch.mean() 平均值的简单用法
    Pytorchtorch.mean()的简单用法简单来说就是求平均数。比如以下的三种简单情况:importtorchx1=torch.Tensor([1,2,3,4])x2=torch.Tensor([[1],[2],[3],[4]])x3=torch.Tensor([[1,2],......
  • apache kafka系列之迁移与扩容工具用法
    kafka迁移与扩容工具使用参考官网site:https://cwiki.apache.org/confluence/display/KAFKA/Replication+tools#Replicationtools-6.ReassignPartitionsTool说明:当我们对kafka集群扩容时,需要满足2点要求: 将指定topic迁移到集群内新增的node上。将topic的指定partition迁移到新增......
  • 使用 Vue 的一些技巧
    尽可能地保证父子组件的单向数据流例如在子组件中直接修改传入的props数据,有可能对父组件或是其他数据源造成意外破坏;把DOM操作放在mounted生命周期中......
  • Request类源码分析、序列化组件介绍、序列化类的基本使用、常用字段类和参数、反序列
    目录一、Request类源码分析二、序列化组件介绍三、序列化类的基本使用查询所有和查询单条四、常用字段类和参数(了解)常用字段类字段参数(校验数据来用的)五、反序列化之校验六、反序列化之保存七、APIVIew+序列化类+Response写的五个接口代码八、序列化高级用法之source(了解)九、......
  • 使用Scanner 的一些细节
    使用Scanner的一些细节String转换成 Int intvalue-interger.parseInt();int转换成StringSystem.out.println(数字+“字符”);  ......
  • Oracle partition by 用法及函数
    Oraclepartitionby--函数row_number、rank、dense_rank--row_number:序号,不重复;例如:1,2,3,4,5--rank:排序,重复;例如:1,2,2,2,5--dense_rank:排序,不重复;例如:1,2,2,2,3--sum:求和,本行排名之前(包括本行排名)的总和--count:技术,包括本行排名一共有多少名SELECTt.*FROM(S......
  • 有许多UPnP软件可供选择,以下是一些常见的UPnP软件
    UPnP是通用即插即用(UniversalPlugandPlay)的缩写,它是一种网络协议,可以让设备在网络中自动发现和连接到其他设备,从而实现设备间的互联和数据共享。UPnP最初是由微软等公司推出的,它的主要功能是允许设备自动进行端口映射,从而实现网络服务的远程访问。UPnP协议还支持设备控制、事件......
  • FreeRtos的移植,以及一些嵌入式学习心得。
    不得不先提心得。这不是第一次移植FreeRtos,至少是五六七八九次了,当然也不是最后一次。但是每一次移植其实都差不多,并没有什么得心应手的感觉。原因就是学的东西太多,学的太杂。我不得不承认,就算我天资聪慧,异于常人,记这么多知识是不可能的。人力有穷时。尊重这个客观现实,但不放......