1、了解XML
XML,即可扩展标记语言(Extensible Markup Language),标准通用标记语言的子集,一种用于标记电子文件使其具有结构性的标记语言。它可以用来标记数据、定义数据类型,是一种允许用户对自己的标记语言进行定义的源语言。 它非常适合万维网传输,提供统一的方法来描述和交换独立于应用程序或供应商的结构化数据。它和JSON都是一种数据交换格式。
作用:解析XML文档,创建XML文档。
2、什么是可扩展标记语言?
· 可扩展标记语言是一种很像超文本标记语言的标记语言。
· 它的设计宗旨是传输数据,而不是显示数据。
· 它的标签没有被预定义。您需要自行定义标签。
· 它被设计为具有自我描述性。
· 它是W3C的推荐标准。
3、解析XML文档的五种方式: 五种方法解析XML文档:Dom、SAX、JDOM、dom4j 、degister
准备xml文件
<?xml version="1.0" encoding="UTF-8"?>
<languages cat="it">
<lang id="1">
<name>Java</name>
<ide>Eclipse</ide>
</lang>
<lang id="2">
<name>Swift</name>
<ide>Xcode</ide>
</lang>
<lang id="3">
<name>c#</name>
<ide>Visual Studio</ide>
</lang>
</languages>
4、DOM
DOM的全称是Document Object Model,也即文档对象模型。在应用程序中,基于DOM的XML分析器将一个XML文档转换成一个对象模型的集合(通常称DOM树),应用程序正是通过对这个对象模型的操作,来实现对XML文档数据的操作。通过DOM接口,应用程序可以在任何时候访问XML文档中的任何一部分数据,因此,这种利用DOM接口的机制也被称作随机访问机制。
4.1 dom读取xml文件
读取代码如下:
public void readXML() throws ParserConfigurationException, IOException, SAXException {
//1.获取DocumentBuilder工厂实例
DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
//2.获取解析器
DocumentBuilder builder = dbf.newDocumentBuilder();
//3.解析文件
Document document = builder.parse(this.getClass().getClassLoader().getResourceAsStream("xml/languages.xml"));
//获取根元素
Element root = document.getDocumentElement();
//获取属性
String cat = root.getAttribute("cat");
System.out.println("根元素为:"+root.getNodeName()+" 属性cat:"+cat);
//获取所有名字为lang的标签
NodeList langs = root.getElementsByTagName("lang");
int length = langs.getLength();
System.out.println("lang名称的节点长度为:"+length);
for (int i = 0; i < length; i++) {
Node node = langs.item(i);
//获取下面所有的子节点
NodeList childNodes = node.getChildNodes();
int len = childNodes.getLength();
System.out.println("第"+(i+1)+"个lang标签子节点长度:"+len);//长度为5(因为含有三个回车)
for (int j = 0; j < len; j++) {
Node item = childNodes.item(j);
//只对节点类型为ELEMENT_NODE的操作 回车的类型为TEXT_NODE
if(item.getNodeType()==Node.ELEMENT_NODE){
System.out.println(item.getNodeName()+"="+item.getTextContent());
}
}
}
}
4.2 dom方式创建xml
创建xml代码如下:
public void createXml() throws ParserConfigurationException, TransformerException {
//1.获取DocumentBuilder工厂实例
DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
//2.获取解析器
DocumentBuilder builder = dbf.newDocumentBuilder();
//3.获取Document
Document document = builder.newDocument();
//创建节点
Element root = document.createElement("languages");
//创建属性
root.setAttribute("cat", "it");
//创建lang
Element lang = document.createElement("lang");
lang.setAttribute("id", "1");
Element name = document.createElement("name");
name.setTextContent("java");//设置文本内容
Element ide = document.createElement("ide");
ide.setTextContent("Eclipse");
//添加节点
lang.appendChild(name);
lang.appendChild(ide);
root.appendChild(lang);
document.appendChild(root);
//输出
TransformerFactory factory = TransformerFactory.newInstance();
Transformer transformer = factory.newTransformer();
transformer.setOutputProperty("encoding", "UTF-8");
//写到字符串
StringWriter out = new StringWriter();
transformer.transform(new DOMSource(document),new StreamResult(out));
System.out.println(out.toString());
//写到文件
transformer.transform(new DOMSource(document), new StreamResult(new File("newxml.xml")));
}