XML 被设计用来传输和存储数据。
HTML 被设计用来显示数据。
XML 指可扩展标记语言(EXtensible Markup Language)
XML 不会做任何事情。XML 被设计用来结构化、存储以及传输信息。
XML 数据以纯文本格式进行存储,因此提供了一种独立于软件和硬件的数据存储方法。
这让创建不同应用程序可以共享的数据变得更加容易。
通过 XML,可以在不兼容的系统之间轻松地交换数据。
< < 小于
> > 大于
& & 和号
' ' 单引号
" " 引号
元素:根元素,正确嵌套,开始关闭
属性......
属性无法包含多重的值(元素可以)
属性无法描述树结构(元素可以)
属性不易扩展(为未来的变化)
属性难以阅读和维护
拥有正确语法的 XML 被称为“形式良好”的 XML。
通过 DTD 验证的 XML 是“合法”的 XML。
W3C 支持一种基于 XML 的 DTD 代替者,它名为 XML Schema
xpath:
在xml中查找信息的语言,导航,节点,节点集合,文本等等
由于我们单纯使用dom定位节点时,大部分时间需要一层一
层的处理,如果有了xPath,我们定位我们的节点将变得很
轻松。他可以根据路径,属性,甚至是条件进行节点的检索。
<?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>
<?xml version="1.0" encoding="UTF-8"?><!-- 版本,编码 -->
<!-- 元素,属性 -->
<!-- 实体引用:<<,>>,"",&apos',&& -->
<!-- xml文件解析的两种方式sax和dom/sax边读边解析,可以在任意时刻停止,不能修改节点/而dom是w3c的标准,
读取所有元素,解析成节点,可以遍历和修改节点 -->
<root>
<![CDATA[<hello>]]>
<class>
<name id="one">fanchuanqi.FX</name>
</class>
</root>
java中采取了两种读取和操作xml的方法
1,DOM
2,SAX
SAX一边扫描一边解析,速度快,不能对节点修改
DOM将文档全部读取解析成为节点树,可以方便遍历和修改节点
DOM4J的maven包导入
public static void main(String[] args) throws Exception {
String str = null;
//导包dom4j
//SAXReader
SAXReader sr=new SAXReader();
Document d1=sr.read("./src/main/java/fanchuanqi/test.xml");
//所有的更改和查询都是基于Document对象
Element root=d1.getRootElement();
Element cl=root.element("class");
List<Element> na=cl.elements();
for(Element one:na) {
System.out.println(one.getText()+" "+one.getName());
System.out.println(one.attributeValue("id"));
str=one.getText();
}
//XMLwriter
Document d2=DocumentHelper.createDocument();
Element root1=d2.addElement("list");
Element name=root1.addElement("name");
name.addAttribute("id", "two");
name.addText("OK");
XMLWriter xw=new XMLWriter(newFileOutputStream("./src/main/java/fanchuanqi/test2.xml"));
xw.write(d2);
导包jaxen
//selectNodes&&selectSingleNode
String xpath="/class";
List<Node> nodes=d1.selectNodes(xpath);
Node nodeSin=d1.selectSingleNode("/");
System.out.println(nodeSin);
System.out.println("aa");
for(Node node:nodes) {
System.out.println(node+"aa");
}
}