1 xml介绍
XML 指可扩展标记语言(EXtensible Markup Language)
XML 是一种标记语言,很类似 HTML
XML 的设计宗旨是传输数据,而非显示数据
XML 标签没有被预定义。您需要自行定义标签。
XML 被设计为具有自我描述性。
XML 是 W3C 的推荐标准
可扩展标记语言 (XML) 于 1998 年 2 月 10 日成为 W3C 的推荐标准
1.1 xml与html的差异
XML 不是 HTML 的替代。
XML 和 HTML 为不同的目的而设计:
- XML 被设计为传输和存储数据,其焦点是数据的内容。
- HTML 被设计用来显示数据,其焦点是数据的外观。
HTML 旨在显示信息,而 XML 旨在传输信息。
1.2 xml作用
作用 | 介绍 |
---|---|
简化数据共享 | 在真实的世界中,计算机系统和数据使用不兼容的格式来存储数据。XML 数据以纯文本格式进行存储,因此提供了一种独立于软件和硬件的数据存储方法。这让创建不同应用程序可以共享的数据变得更加容易。 |
简化数据传输 | 通过 XML,可以在不兼容的系统之间轻松地交换数据。对开发人员来说,其中一项最费时的挑战一直是在因特网上的不兼容系统之间交换数据。由于可以通过各种不兼容的应用程序来读取数据,以 XML 交换数据降低了这种复杂性。 |
简化平台变更 | 升级到新的系统(硬件或软件平台),总是非常费时的。必须转换大量的数据,不兼容的数据经常会丢失。 XML 数据以文本格式存储。这使得 XML 在不损失数据的情况下,更容易扩展或升级到新的操作系统、新应用程序或新的浏览器。 |
增强数据有效性和独立性 | 由于 XML 独立于硬件、软件以及应用程序,XML 使您的数据更可用,也更有用。不同的应用程序都能够访问您的数据,不仅仅在 HTML 页中,也可以从 XML 数据源中进行访问。通过 XML,您的数据可供各种阅读设备使用(手持的计算机、语音设备、新闻阅读器等),还可以供盲人或其他残障人士使用。 |
1.3 xml树结构
XML 文档必须包含根元素。该元素是所有其他元素的父元素。
XML 文档中的元素形成了一棵文档树。这棵树从根部开始,并扩展到树的最底端。
所有元素均可拥有子元素:
<root>
<child>
<subchild>.....</subchild>
</child>
</root>
<bookstore>
<book category="COOKING">
<title lang="en">Everyday Italian</title>
<author>Giada De Laurentiis</author>
<year>2005</year>
<price>30.00</price>
</book>
<book category="CHILDREN">
<title lang="en">Harry Potter</title>
<author>J K. Rowling</author>
<year>2005</year>
<price>29.99</price>
</book>
<book category="WEB">
<title lang="en">Learning XML</title>
<author>Erik T. Ray</author>
<year>2003</year>
<price>39.95</price>
</book>
</bookstore>
解释如下所示的树结构
- 元素可以拥有多个属性,或0个属性,属性值必须加引号;
- 具有5个预定义的实体引用,例如<
- 最佳实践是尽量避免用属性来描述元素,尽量用子元素来描述元素
- 因使用属性而引起的一些问题:
- 属性无法包含多重的值(元素可以)
- 属性无法描述树结构(元素可以)
- 属性不易扩展(为未来的变化)
- 属性难以阅读和维护
例如下面的例子
<note date="08/08/2008">
<to>George</to>
<from>John</from>
<heading>Reminder</heading>
<body>Don't forget the meeting!</body>
</note>
可以采用子元素进行描述
<note>
<date>
<day>08</day>
<month>08</month>
<year>2008</year>
</date>
<to>George</to>
<from>John</from>
<heading>Reminder</heading>
<body>Don't forget the meeting!</body>
</note>
2 dom4j
我们采用以下的xml文件来进行说明
<?xml version="1.0" encoding="UTF-8"?>
<四大名著>
<西游记 id="x001">
<作者>吴承恩1</作者>
<作者>吴承恩2</作者>
<朝代>明朝</朝代>
</西游记>
<红楼梦 id="x002">
<作者>曹雪芹</作者>
</红楼梦>
</四大名著>
maven引用依赖如下
<dependencies>
<dependency>
<groupId>dom4j</groupId>
<artifactId>dom4j</artifactId>
<version>1.6.1</version>
</dependency>
</dependencies>
2.1 读取xml文件并遍历元素
public static void listNode(Element node) {
System.out.println("当前节点名称:" + node.getName());
@SuppressWarnings("unchecked")
List<Attribute> attributes = node.attributes();//获取属性
for (Attribute attribute : attributes) {
System.out.println(attribute.getText() + "|" + attribute.getName() + "|" + attribute.getValue());
}
if (!node.getTextTrim().equals(""))
System.out.println("文本内容为:" + node.getText());
@SuppressWarnings("unchecked")
Iterator<Element> it = node.elementIterator();//遍历子元素
while (it.hasNext()) {
Element e = it.next();
listNode(e);
}
}
2.2 编辑document
public static void main(String[] args) throws Exception {
SAXReader reader = new SAXReader();
Document document = reader.read(new File(xmlfile));
Element node = document.getRootElement();//获取根元素
listNode(node);
Element element = node.element("红楼梦");//获取跟元素下的子元素,子元素名称为“红楼梦”
Attribute attr = element.attribute("id");//获取子元素的属性,属性名称是id,属性值是“x002”
element.remove(attr);//删除掉子元素的属性
element.addAttribute("name", "作者");//给子元素添加属性,name="作者"
Element newElement = element.addElement("朝代");//给子元素添加子属性,属性名称是“朝代”
newElement.setText("清朝");//朝代添加文字
Element author = element.element("作者");//获取到子元素“作者”
boolean flag = element.remove(author);//删除子元素
element.addCDATA("红楼梦,是一部爱情小说");
writer(document);
}
经过上述代码,xml文件变为
<?xml version="1.0" encoding="UTF-8"?>
<四大名著>
<西游记 id="x001" sid="100">
<作者>吴承恩1</作者>
<作者>吴承恩2</作者>
<朝代>明朝</朝代>
</西游记>
<红楼梦 name="作者">
<朝代>清朝</朝代><![CDATA[红楼梦,是一部爱情小说]]>
</红楼梦>
</四大名著>
2.3 输出xml
public static void writer(Document document) throws Exception{
OutputFormat format = OutputFormat.createPrettyPrint();
format.setEncoding("UTF-8");
XMLWriter writer = new XMLWriter(new OutputStreamWriter(new FileOutputStream(new File(xmlfile)), "UTF-8"), format);
writer.write(document);
writer.flush();
writer.close();
}
登录发表评论 登录 注册