博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Java中的XML操作
阅读量:7240 次
发布时间:2019-06-29

本文共 6477 字,大约阅读时间需要 21 分钟。

、XML简介

     1.  XML,即可扩展标记语言(Extendsible Markup Language),标准通用标记语言的子集,一种用于标记电子文件使其具有结构性的标记语言。它可以用来标记数据、定义数据类型,是一种允许用户对自己的标记语言进行定义的源语言。它非常适合万维网传输,提供统一的方法来描述和交换独立于应用程序或供应商的结构化数据。

    XML是一种标记语言,很类似HTML

    XML的设计宗旨是传输数据,而非显示数据

    XML标签没有被预定义,需要自定义标签

    XML被设计为具有自我描述性

    XML是W3C的推荐标准

    2.  XML与HTML

    XML不是HTML的替代品

    XML和HTML是为不同的目的而设计的

    XML被设计为传输和存储数据,其焦点是数据的内容

    HTML被设计用来显示数据,其焦点是数据的外观

    HTML旨在显示信息,而XML旨在传输信息

    3.  XML的特点

    XML仅仅是纯文本

    XML没什么特别的。它仅仅是纯文本而已。有能力处理纯文本的软件都可以处理XML

    不过,能够读懂XML的应用程序可以有针对性地处理XML的标签。标签的功能性意义依赖于程序的特性。

    XML没有预定义的标签

    在HTML中使用的标签(以及HTML的结构)是预定义的。HTML文档只能够使用在HTML中定义过的标签(比如<p>、<h1>等等)。

    XML允许创作者定义自己的标签和自己的文档结构。

    4.XML的语法规则

    XML的语法规则很简单,且很有逻辑。这些规则很容易学习,也很容易使用。

    在XML中,省略关闭标签是非法的,所有元素都必须有关闭标签。

    XML标签对大小写敏感

    XML必须正确地嵌套

    XML文档必须有根元素

    XML的属性值须加引号

    XML中,空格会被保留

    元素可以包含其他元素、文本或者两者的混合物。元素也可以拥有属性。   

1
2
3
4
5
6
7
8
<
bookstore
>
    
<
book 
category
=
"CHILDREN"
>
        
<
title
>Harry Potter</
title
>
        
<
author
>J.K.Rowling</
author
>
        
<
year
>2005</
year
>
        
<
price
>29.99</
price
>
    
</
book
>
</
bookstore
>

    <bookstore>和<book>都拥有元素内容,因为它们包含了其他元素。<author>只有文本内容,因为它仅包含文本。

    在上例中,只有<book>元素拥有属性(category="CHILDREN")。

二、使用Java读取XML数据

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
<?
xml 
version
=
"1.0" 
encoding
=
"UTF-8"
?>
<
Languages 
cat
=
"it"
>
    
<
lan 
id
=
"1"
>
        
<
name
>Java</
name
>
        
<
ide
>Eclipse</
ide
>
    
</
lan
>
    
<
lan 
id
=
"2"
>
        
<
name
>Swift</
name
>
        
<
ide
>Xcode</
ide
>
    
</
lan
>
    
<
lan 
id
=
"3"
>
        
<
name
>C#</
name
>
        
<
ide
>Visual Studio</
ide
>
    
</
lan
>
</
Languages
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
package 
com.eduask.TestReadXML.test;
 
import 
java.io.File;
import 
java.io.IOException;
 
import 
javax.xml.parsers.DocumentBuilder;
import 
javax.xml.parsers.DocumentBuilderFactory;
import 
javax.xml.parsers.ParserConfigurationException;
 
import 
org.w3c.dom.Document;
import 
org.w3c.dom.Element;
import 
org.w3c.dom.Node;
import 
org.w3c.dom.NodeList;
import 
org.xml.sax.SAXException;
 
public 
class 
ReadXML {
     
    
//DOM方式解析XML
    
public 
static 
void 
main(String[] args) {
        
try 
{
            
//创建解析器工厂并得到它的实例factory
            
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
            
//通过factory获取解析器bulider
            
DocumentBuilder bulider = factory.newDocumentBuilder();
            
//通过bulider获取XML文件document
            
Document document = bulider.parse(
new 
File(
"WebContent/WEB-INF/languages.xml"
));
            
//通过document获取文件中的根元素root
            
Element root = document.getDocumentElement();
            
System.out.println(
"cat="
+root.getAttribute(
"cat"
));
            
//通过root获取节点列表list
            
NodeList list = root.getElementsByTagName(
"lan"
);
            
//遍历list
            
for
(
int 
i=
0
; i<list.getLength(); i++){
                
//通过list获取根元素下的第一层元素列表lan(标签<lan>)
                
Element lans = (Element) list.item(i);
                
System.out.println(
"--------------"
);
                
System.out.println(
"id="
+lans.getAttribute(
"id"
));
                
//通过lan获取其下面的一层子元素列表childList(标签<name>、<ide>)
                
NodeList childList = lans.getChildNodes();
                
//遍历chilidList
                
for
(
int 
j=
0
; j<childList.getLength(); j++){
                    
//通过childList获取其下面的元素child
                    
Node child = childList.item(j);
                    
if
(child 
instanceof 
Element){
//对获取到的元素进行类型检查(不输出看不见的节点)
                        
System.out.println(child.getNodeName()+
"="
+child.getTextContent());
                    
}
                
}
            
}
        
catch 
(ParserConfigurationException e) {
            
e.printStackTrace();
        
catch 
(SAXException e) {
            
e.printStackTrace();
        
catch 
(IOException e) {
            
e.printStackTrace();
        
}
    
}
 
}

三、使用Java创建XML数据

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
import 
java.io.File;
import 
java.io.StringWriter;
 
import 
javax.xml.parsers.DocumentBuilder;
import 
javax.xml.parsers.DocumentBuilderFactory;
import 
javax.xml.parsers.ParserConfigurationException;
import 
javax.xml.transform.Transformer;
import 
javax.xml.transform.TransformerConfigurationException;
import 
javax.xml.transform.TransformerException;
import 
javax.xml.transform.TransformerFactory;
import 
javax.xml.transform.dom.DOMSource;
import 
javax.xml.transform.stream.StreamResult;
 
import 
org.w3c.dom.Document;
import 
org.w3c.dom.Element;
 
public 
class 
CreateXML {
     
    
//DOM方式操作和生成XML
    
public 
static 
void 
main(String[] args) {
        
try 
{
            
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
            
DocumentBuilder builder = factory.newDocumentBuilder();
            
Document document = builder.newDocument();
            
Element root = document.createElement(
"Languages"
);
            
root.setAttribute(
"cat"
"it"
);
             
            
Element lan1 = document.createElement(
"lan"
);
            
lan1.setAttribute(
"id"
"1"
);
            
Element name1 = document.createElement(
"name"
);
            
name1.setTextContent(
"java"
);
            
Element ide1 = document.createElement(
"ide"
);
            
ide1.setTextContent(
"Eclipse"
);
            
lan1.appendChild(name1);
            
lan1.appendChild(ide1);
             
            
Element lan2 = document.createElement(
"lan"
);
            
lan2.setAttribute(
"id"
"2"
);
            
Element name2 = document.createElement(
"name"
);
            
name2.setTextContent(
"Swift"
);
            
Element ide2 = document.createElement(
"ide"
);
            
ide2.setTextContent(
"Xcode"
);
            
lan2.appendChild(name2);
            
lan2.appendChild(ide2);
             
            
Element lan3 = document.createElement(
"lan"
);
            
lan3.setAttribute(
"id"
"3"
);
            
Element name3 = document.createElement(
"name"
);
            
name3.setTextContent(
"C#"
);
            
Element ide3 = document.createElement(
"ide"
);
            
ide3.setTextContent(
"Visual Studio"
);
            
lan3.appendChild(name3);
            
lan3.appendChild(ide3);
             
            
root.appendChild(lan1);
            
root.appendChild(lan2);
            
root.appendChild(lan3);
            
document.appendChild(root);
             
            
//--------------
             
            
TransformerFactory transformerFactory = TransformerFactory.newInstance();
            
Transformer transformer = transformerFactory.newTransformer();
            
StringWriter writer = 
new 
StringWriter();
            
transformer.transform(
new 
DOMSource(document), 
new 
StreamResult(writer));
            
System.out.println(writer.toString());
             
            
transformer.transform(
new 
DOMSource(document), 
new 
StreamResult(
new 
File(
"newXml.xml"
)));
             
        
catch 
(ParserConfigurationException e) {
            
e.printStackTrace();
        
catch 
(TransformerConfigurationException e) {
            
e.printStackTrace();
        
catch 
(TransformerException e) {
            
e.printStackTrace();
        
}
    
}
 
}

四、使用DOM4j操作XML数据

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
import 
org.dom4j.Document;
import 
org.dom4j.DocumentException;
import 
org.dom4j.DocumentHelper;
 
public 
class 
Test {
 
    
public 
static 
void 
main(String[] args) {
        
String xmlString = 
"<root><people>yelven</people></root>"
;
         
        
try 
{
            
Document document = DocumentHelper.parseText(xmlString);
             
            
System.out.println(document.asXML());
        
catch 
(DocumentException e) {
            
e.printStackTrace();
        
}
    
}
 
}

本文转自yeleven 51CTO博客,原文链接:http://blog.51cto.com/11317783/1785040

转载地址:http://bofbm.baihongyu.com/

你可能感兴趣的文章
SED入门
查看>>
使用Unity3D引擎开发赛车游戏
查看>>
Mule消息路由
查看>>
[Asp.Net]状态管理(ViewState、Cookie)
查看>>
马哥 Linux运维基础进阶和shell入门
查看>>
RotateDisp – 一键旋转显示画面 - 小众软件
查看>>
C# Json处理日期和Table
查看>>
addEventListener、attachEvent、cancelBubble兼容性随笔
查看>>
JS编写日历控件(支持单日历 双日历 甚至多日历等)
查看>>
400操作 示例
查看>>
交换机、集线器、路由器区别(转)
查看>>
UITextField,UITextView字数限制
查看>>
Spring 循环依赖
查看>>
sencha touch 在线实战培训 第一期 第二节
查看>>
Mirror--使用证书配置镜像模板
查看>>
ArcGIS 10 安装程序及破解文件
查看>>
C#中读写JSON风格的配置信息
查看>>
Spring-Context之一:一个简单的例子
查看>>
(转)S5PV210 三个Camera Interface/CAMIF/FIMC的区别
查看>>
struct和typedef struct
查看>>