XML&DOM解析XML
目录
XML
XML(EXtensible Markup Language)
特点
作用
XML标签
XML转义符列表
XML编写注意事项
DOM解析XML
DOM介绍
常用API
XML
XML(EXtensible Markup Language)
- 可扩展标记语言
特点
- XML与操作系统、编程语言的开发平台无关
- 实现不同系统之间的数据交换
作用
- 数据交互
- 配置应用程序和网站
- Ajax基石
XML标签
XML文档内容由一系列标签元素组成
<元素名 属性名=“属性值”>元素内容</元素名>
- 属性值用引号包裹
- 一个元素可以有多个属性
- 属性值中不能直接包含<、&
- 不建议使用的字符:“、‘、>
XML转义符列表
符号 | 转义符 |
---|---|
< | < |
> | > |
“ | " |
‘ | ' |
& | & |
空格 |   |
XML编写注意事项
- 所有XML元素都必须有结束标签
- XML标签对大小写敏感
- XML必须正确的嵌套
- 同级标签以缩进对齐
- 元素名称可以包含字母、数字或其他的字符
- 元素名称不能以数字或者标点符号开始
元素名称中不能含空格
<?xml version=”1.0” encoding=”UTF-8” ?>
格林童话
格林
价格:20.00
安徒生童话
安徒生
价格:19.9
<?xml version=”1.0” encoding=”UTF-8” ?>
S
M
L
XL
XXL
结果:
DOM解析XML
DOM介绍
- 文档对象模型(Document Object Model)
- DOM把XML文档映射成一个倒挂的树
常用API
DOM解析包:org.w3c.dom
常用接口 | 常用方法 | 说明 |
Document:表示整个 XML 文档 | NodeList getElementsByTagName(String Tag) | 按文档顺序返回文档中指定标记名称的所有元素集合 |
Element createElement(String tagName) | 创建指定标记名称的元素 | |
Node:该文档树中的单个节点 | NodeList getChildNodes() | 获取该元素的所有子节点,返回节点集合 |
Element:XML 文档中的一个元素 | String getTagName() | 获取元素名称 |
/**
收藏信息.xml
*/
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<PhoneInfo>
<Brand name="华为">
<Type name="Mate30 Pro"/>
<Type name="P30 Pro"/>
<Type name="nova 6"/>
</Brand>
<Brand name="苹果">
<Type name="iPhone11 Pro"/>
</Brand>
</PhoneInfo>
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;
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 java.io.File;
import java.io.IOException;
public class ParseXMLDmo {
Document document = null;
public static void main(String[] args) {
ParseXMLDmo parseXMLDmo = new ParseXMLDmo();
parseXMLDmo.getDocument();
// System.out.println(parseXMLDmo.document);
parseXMLDmo.showInfo();
parseXMLDmo.addNode();
}
private void addNode() {
Element brand = document.createElement("Brand");
brand.setAttribute("name","小米");
Element type = document.createElement("Type");
type.setAttribute("name","小米6");
brand.appendChild(type);
document.getElementsByTagName("PhoneInfo").item(0).appendChild(brand);
this.saveXML("src/main/java/XML/收藏.xml");
}
private void saveXML(String path) {
TransformerFactory transformerFactory = TransformerFactory.newInstance();
try {
Transformer transformer = transformerFactory.newTransformer();
DOMSource source = new DOMSource(document);
StreamResult result = new StreamResult(new File(path));
transformer.transform(source,result);
} catch (TransformerConfigurationException e) {
e.printStackTrace();
} catch (TransformerException e) {
e.printStackTrace();
}
}
private void showInfo() {
//NodeList getElementsByTagName(String Tag) 按文档顺序返回文档中指定标记名称的所有元素集合
NodeList nodeList = document.getElementsByTagName("Brand");
for (int i = 0; i < nodeList.getLength(); i++) {
Node node = nodeList.item(i);
Element node1 = (Element) node;
String name = node1.getAttribute("name");
System.out.println(name);
//NodeList getChildNodes() 获取该元素的所有子节点,返回节点集合
NodeList childNodes = node1.getChildNodes();
for (int j = 0; j < childNodes.getLength(); j++) {
Node node2 = childNodes.item(j);
if (node2.getNodeType() == Node.ELEMENT_NODE) {
Element node21 = (Element) node2;
String name1 = node21.getAttribute("name");
System.out.println(name1);
}
}
}
}
public void getDocument() {
try {
DocumentBuilderFactory documentBuilderFactory = DocumentBuilderFactory.newInstance();
DocumentBuilder documentBuilder = documentBuilderFactory.newDocumentBuilder();
document = documentBuilder.parse("src/main/java/XML/收藏信息.xml");
} catch (ParserConfigurationException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} catch (SAXException e) {
e.printStackTrace();
}
}
}
输出结果:输出信息在一个新的xml文件中
/**
收藏.xml
*/
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<PhoneInfo>
<Brand name="华为">
<Type name="Mate30 Pro"/>
<Type name="P30 Pro"/>
<Type name="nova 6"/>
</Brand>
<Brand name="苹果">
<Type name="iPhone11 Pro"/>
</Brand>
<Brand name="小米">
<Type name="小米6"/>
</Brand>
</PhoneInfo>
控制台输出收藏信息.xml文件中的信息
还没有评论,来说两句吧...