java对xml文件添加节点

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java对xml文件添加节点相关的知识,希望对你有一定的参考价值。

例如:<?xml version="1.0" encoding="GB2312"?>
<ROOT>
<SYSTEM>
<SYSTEM_ID><![CDATA[test_wj]]></SYSTEM_ID>
<CHECK_CODE><![CDATA[kHGb0+p@R7Hohn-MoMhy$roMMR*Wlo]]></CHECK_CODE>
<SYS_ORGAN_ID><![CDATA[51]]></SYS_ORGAN_ID>
</SYSTEM>
</ROOT>文件 我想通过一段代码把它变成
<?xml version="1.0" encoding="GB2312"?>
<ROOT>
<SYSTEM>
<SYSTEM_ID><![CDATA[test_wj]]></SYSTEM_ID>
<CHECK_CODE><![CDATA[kHGb0+p@R7Hohn-MoMhy$roMMR*Wlo]]></CHECK_CODE>
<SYS_ORGAN_ID><![CDATA[51]]></SYS_ORGAN_ID>
</SYSTEM>
<PARAM>
<TASKLIST>
<TASK>
<DATA_TRAN_ID><![CDATA[14595]]></DATA_TRAN_ID>
</TASK>
</TASKLIST>
</PARAM>
</ROOT>
qdmmy6 你基本上给出了答案 但是你能在给我补充一下吗?我想删除某个节点 或者在指定的节点下面加上某个节点还有就是你下面写的 我想 在一个子节点下面并列添加两个节点 怎么办 例如:添加成
<TASKLIST>
<TASK>
<DATA_TRAN_ID><![CDATA[14595]]></DATA_TRAN_ID>
<DATA_TRAN_ID_AAA>10002</DATA_TRAN_ID_AAA>
</TASK>
</TASKLIST>
给个小例子 我基本上就能看懂了 我在家30分
哥们 最后这个问题很麻烦 项目需求 用jdom不让用dom4j
您看能不能想下办法

参考技术A /*
这里使用了dom4j组件,你需要自己去下载dom4j。
其中a.xml是你的源文件。
这个程序没有向磁盘中创建一个新文件,你可以自己修改代码。
例如:
XMLWriter xmlWriter = new XMLWriter(new PrintWriter(System.out), format);
可以修改为
XMLWriter xmlWriter = new XMLWriter(new FileWriter("a.xml"), format);
这样就可以修改源文件a.xml了。
*/

import org.dom4j.*;
import org.dom4j.io.OutputFormat;
import org.dom4j.io.XMLWriter;
import org.dom4j.io.SAXReader;

import java.io.*;

public class Test
public static void main(String[] args)
SAXReader saxReader = new SAXReader();
try
Document doc = saxReader.read(new File("a.xml"));
doc.getRootElement().addElement("PARAM")
.addElement("TASKLIST").addElement("TASK")
.addElement("DATA_TRAN_ID").addCDATA("14595");

OutputFormat format = OutputFormat.createPrettyPrint();
format.setEncoding("gb2312");
XMLWriter xmlWriter = new XMLWriter(new PrintWriter(System.out), format);
xmlWriter.write(doc);
xmlWriter.close();
catch (DocumentException e)
e.printStackTrace();
catch(IOException e)
e.printStackTrace();


参考技术B 使用dom解析是可以做到的,需要用到的api有
javax.xml.parsers.DocumentBuilder
org.w3c.dom.Document
其他相关的去看下文档就行了
参考技术C 正在做,一会给你发过去,把你的QQ给我.本回答被提问者采纳

在Java中使用xpath对xml解析

xpath是一门在xml文档中查找信息的语言。xpath用于在XML文档中通过元素和属性进行导航。它的返回值可能是节点,节点集合,文本,以及节点和文本的混合等。
在学习本文档之前应该对XML的节点,元素,属性,文本,处理指令,注释,根节点,命名空间以及节点关系有一定的了解以及对xpath也有了解。
XML学习地址:http://www.runoob.com/xml/xml-tutorial.html
xpath基本语法学习地址:http://www.runoob.com/xpath/xpath-tutorial.html
xpath官方文档:https://yunpan.cn/cvc4tEIGy5EvS 访问密码 9d16
本文主要介绍:Java中使用xpath操作对xml操作。
1)首先在dom4j中如何使用xpath技术
导入xPath支持的jar包。jaxen-1.1-beta-6.jar(首先要先导入dom4j包,dom4j下载地址:http://www.dom4j.org/dom4j-1.6.1/)。

技术分享

导包之后如图所示:

技术分享

如果不知道怎样导包请参考我以前的一篇博客:Java获取xml节点总结之读取xml文档节点
2)在Java中使用xpath方法,主要有两点:
List<Node> selectNodes("xpath表达式"); 查询多个节点对象
Node selectSingleNode("xpath表达式"); 查询一个节点对象
下面就用实例说明使用方法。

一、selectNodes使用方法:

 1 package com.vastsum.demo;
 2 
 3 import java.io.File;
 4 import java.io.FileOutputStream;
 5 import java.util.List;
 6 
 7 import org.dom4j.Document;
 8 import org.dom4j.Element;
 9 import org.dom4j.Node;
10 import org.dom4j.io.OutputFormat;
11 import org.dom4j.io.SAXReader;
12 import org.dom4j.io.XMLWriter;
13 
14 /**
15  * 
16  * @author shutu008
17  *selectNode的使用方法
18  */
19 public class xpathDemo {
20 
21     public static void main(String[] args) throws Exception {
22 
23     Document doc = new SAXReader().read(new File("./src/contact.xml"));
24         
25         /**
26          * @param xpath 表示xpath语法变量
27          */
28     String xpath="";
29         
30         /**
31          * 1.      /      绝对路径      表示从xml的根位置开始或子元素(一个层次结构)
32          */
33         xpath = "/contactList";
34         xpath = "/contactList/contact";
35         
36         /**
37          * 2. //     相对路径       表示不分任何层次结构的选择元素。
38          */
39         xpath = "//contact/name";
40         xpath = "//name";
41         
42         /**
43          * 3. *      通配符         表示匹配所有元素
44          */
45         xpath = "/contactList/*"; //根标签contactList下的所有子标签
46         xpath = "/contactList//*";//根标签contactList下的所有标签(不分层次结构)
47         
48         /**
49          * 4. []      条件           表示选择什么条件下的元素
50          */
51         //带有id属性的contact标签
52         xpath = "//contact[@id]";
53         //第二个的contact标签
54         xpath = "//contact[2]";
55         //选择最后一个contact标签
56         xpath = "//contact[last()]";
57         
58         /**
59          * 5. @     属性            表示选择属性节点
60          */
61         xpath = "//@id"; //选择id属性节点对象,返回的是Attribute对象
62         xpath = "//contact[not(@id)]";//选择不包含id属性的contact标签节点
63         xpath = "//contact[@id=‘002‘]";//选择id属性值为002的contact标签
64         xpath = "//contact[@id=‘001‘ and @name=‘eric‘]";//选择id属性值为001,且name属性为eric的contact标签
65         
66         /**
67          *6.  text()   表示选择文本内容
68          */
69         //选择name标签下的文本内容,返回Text对象
70         xpath = "//name/text()";
71         xpath = "//contact/name[text()=‘张三‘]";//选择姓名为张三的name标签
72         
73         
74         List<Node> list = doc.selectNodes(xpath);
75         for (Node node : list) {
76             System.out.println(node);
77         }
78     
79         //写出xml文件
80         //输出位置
81         FileOutputStream out = new FileOutputStream("d:/contact.xml");
82         
83         //指定格式
84         OutputFormat format = OutputFormat.createPrettyPrint();
85         format.setEncoding("utf-8");
86         XMLWriter writer = new XMLWriter(out,format);
87         
88         //写出内容
89         writer.write(doc);
90         
91         //关闭资源
92         writer.close();
93         
94     }
95     
96 
97 }

二、selectSingleNode的使用方法

 1 package com.vastsum.demo;
 2 
 3 import java.io.File;
 4 import java.util.Iterator;
 5 
 6 import org.dom4j.Attribute;
 7 import org.dom4j.Document;
 8 import org.dom4j.Element;
 9 import org.dom4j.io.SAXReader;
10 
11 /**
12  * 
13  * @author shutu008
14  *selectSingleNode的使用
15  */
16  public class xpathDemo1{
17      public static void main(String[] args) throws Exception{
18          //读取XML文件,获得document对象
19         SAXReader saxReader = new SAXReader();    
20         Document doc = saxReader.read(new File("./src/contact.xml"));
21         
22         //使用xpath获取某个节点
23         String xpath = "";
24         
25         //对contact元素 id="001"的节点,操作
26         xpath = "//contact[@id = ‘001‘]";
27         Element contactElem =    (Element)doc.selectSingleNode(xpath);
28         
29         //设置这个节点的属性值
30         contactElem.addAttribute("name", "001");
31         
32         //输出这个节点的所有属性值
33         for(Iterator it = contactElem.attributeIterator();it.hasNext();){
34         Attribute conAttr = (Attribute)it.next();
35         String conTxt = conAttr.getValue();
36         String conAttrName = conAttr.getName();
37         System.out.println(conAttrName+" = "+conTxt);
38         }
39         
40      }
41  }

 备注:以下是操作的xml文件

技术分享
 1 <?xml version="1.0" encoding="UTF-8"?>
 2 <contactList id="0">
 3     <contact id="001" class="style" name="lisi">
 4         <name>张三</name>
 5         <age>20</age>
 6         <phone>134222223333</phone>
 7         <email>[email protected]</email>
 8         <qq>432221111</qq>
 9     </contact>
10     <contact id="002">
11         <name>李四</name>
12         <age>20</age>
13         <phone>134222225555</phone>
14         <email>[email protected]</email>
15         <qq>432222222</qq>
16     </contact>
17     <contactTwo>
18         <name>王五</name>
19         <age>32</age>
20         <phone>465431341</phone>
21         <emali>[email protected]</emali>
22         <qq>46164694</qq>
23     </contactTwo>
24     <test>测试</test>
25     <test>其他用途</test>
26 </contactList>
View Code

 

以上是关于java对xml文件添加节点的主要内容,如果未能解决你的问题,请参考以下文章

使用java将节点添加到xml得到意外结果?

详解SimpleXML添加_修改_删除_遍历XML节点属性

通过 PHP 在 XML 文件中添加新节点

如何在pom.xml文件中修改build节点

java 动态的给树添加新节点 望高手指点啊

C# XML 给xml文件添加根节点