JAVA一键操作 XML简单API

今天我们来搞一搞 XML操作,网上相关例子比较多,但功能都参差不齐。我这里把之前一直常用的一个类拿出来和大家一起分享。

XmlSax 这个是用Sax的方式进行解析的。所以需要引入 dom4j

1、生产xml文件

默认编码
XmlSax sax1 = new XmlSax();
System.out.println(sax1.toXmlString());

输出:<?xml version="1.0" encoding="utf-8"?>

自定义编码

XmlSax sax2 = new XmlSax(Charset.forName("gbk"));
System.out.println(sax2.toXmlString());

输出:<?xml version="1.0" encoding="GBK"?>

生成自定义XML

XmlSax sax3 = new XmlSax();
Document document = sax3.getDocument();

// 添加一个名为root的元素
Element root = document.addElement("root");
// 在root上添加注释
root.addComment("this is root");
// 在root下面添加一个名为elemant1的元素
Element element1 = root.addElement("element1");
//为elemant1元素 添加id属性,值为myid
element1.addAttribute("id", "this is id");
// 设置element1元素的值
element1.setText("this is element1 value");

System.out.println(sax3.toXmlString());

输出:
<?xml version="1.0" encoding="utf-8"?>
<root>
   <!--this is root-->
   <element1 id="this is id">this is element1 value</element1>
</root>


//XML 写到文件里面
sax3.writeXML("./test.xml");

//直接将 xml 作为页面返回
sax3.writeXMLToWeb(request,response);

 

2、读取并解析XML

String xmlString =  
"<root>" +
"	<element1 id='id1'>this is first elememt1</element1>" +
"	<element2>" +
"		<element1>this is secend elememt1</element1>" +
"	</element2>" +
"</root>";


XmlSax sax4 = new XmlSax(xmlString);
Document document = sax4.getDocument();

2.1 用递进方式进行解析

Element root = document.getRootElement();
Element element;
Attribute attribute;
for(Object elementObj : root.elements())
{
	element = (Element) elementObj;

	System.out.println(element.getName() + " : " + element.getTextTrim());
	System.out.println(element.getName() + " : " + element.getStringValue());

	for(Object attributeObj : element.attributes())
	{
		attribute = (Attribute)attributeObj;
		System.out.println(attribute.getName() + " : " + attribute.getValue());
		System.out.println(attribute.getName() + " : " + attribute.getStringValue());
	}

}

输出:
element1 : this is first elememt1
element1 : this is first elememt1
id : id1
id : id1
element2 : 
element2 : 		this is secend elememt1	

2.2 使用Xpath 的形式进行搜索定位
 

// 寻找所有名字为element1的元素
List elementlist = document.selectNodes("//element1");
Iterator it = elementlist.iterator();
// 迭代
while (it.hasNext()) {
    // 取得每一个名为element1的元素
    Element element1 = (Element) it.next();

    System.out.println(element1.getName() + " : " + element1.getTextTrim());
    // 寻找在element1下一层的所有名字为element2的元素
    Iterator itor = element1.elementIterator("element2");
    while (itor.hasNext()) {
        // 取得在element1下面一层的每一个名为element2的元素
        Element element2 = (Element) itor.next();
        System.out.println(element2.getName() + " : " + element2.getTextTrim());
    }
}

输出:
element1 : this is first elememt1
element1 : this is secend elememt1

2.3 直接定位到指定 元素 或 属性

// 寻找所有名字为element2元素的下一层元素名为element1的元素
List elementlist = document.selectNodes("//element2/element1");
Iterator it = elementlist.iterator();
while (it.hasNext()) {
	// 取得每一个名为element2的元素下一层的每一个名为element1的元素
	Element element1 = (Element) it.next();
	System.out.println(element1.getName() + " : " + element1.getTextTrim());
}

输出:
element1 : this is secend elememt1


// 寻找所有名字为element1的属性为id的属性
List namelist = document.selectNodes("//element1/@id");
Iterator it = namelist.iterator();
// 迭代
while (it.hasNext()) {
	// 取得每一个element1元素下面名为name的属性
	Attribute attribute = (Attribute) it.next();
	System.out.println(attribute.getName() + " : " + attribute.getValue());
}

输出:
id : id1

2.4 可以在任意位置进行修改并存储

Element root = document.getRootElement();
Element element1 = root.element("element1");
root.remove(element1);
System.out.println(sax4.toXmlString());

输出:
<?xml version="1.0" encoding="utf-8"?>
<root> 
   <element2> 
      <element1>this is secend elememt1</element1> 
   </element2>
</root>

更多的dom操作,我就不在这里细说了,我这里基本是给dom4j套了一个外壳,已使之方便的读取或写入,在操作方面还是完全使用dom自身的方法。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

lc9995857

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值