XML
什么是XML
XML 指可扩展标记语言(EXtensible Markup Language)。
XML 是一种很像HTML的标记语言。
XML 的设计宗旨是传输数据,而不是显示数据。
XML 标签没有被预定义。您需要自行定义标签。
XML 被设计为具有自我描述性。
XML 是 W3C 的推荐标准。
每个XML文档必须要且仅有一个跟标签
XML和HTML的区别
XML 不是 HTML 的替代。
HTML 旨在显示信息,而 XML 旨在传输信息。
XML 和 HTML 为不同的目的而设计:
1.XML 被设计用来传输和存储数据。
2.HTML 被设计用来显示数据。
DOM模式解析XML
1.先创建一个xml文档
例如:
<?xml version="1.0" encoding="UTF-8" ?>
<PhoneInfo>
<Brand name="华为">
<Type name="P90"></Type>
</Brand>
<Brand name="苹果">
<Type name="iPhone Z"></Type>
<Type name="iPhone ZL"></Type>
</Brand>
</PhoneInfo>
2.如何使用DOM解析XML
public class TestDOM {
public static void main(String[] args) throws ParserConfigurationException, IOException, SAXException {
//1.解析器工厂
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
//2.解析器
DocumentBuilder builder = factory.newDocumentBuilder();
//3.DOM对象
Document document = builder.parse("src/cn/test2/phone.xml");
//4.操作对象
//getElementsByTagName 获得指定的标签名 标签信息
NodeList barnd = document.getElementsByTagName("Brand");
//getLength 标签长度
for (int i = 0;i<barnd.getLength();i++){
//item 第几个标签
Element element = (Element) barnd.item(i);
//getAttribute 获得指定属性名的属性值
String name = element.getAttribute("name");
NodeList types = element.getElementsByTagName("Type");
//遍历子标签
for(int j=0;j<types.getLength();j++){
Element element1 = (Element) types.item(j);
String type = element1.getAttribute("name");
System.out.println("品牌 "+name+" 类型 " +type);
}
}
}
}
运行结果
品牌 华为 类型 P90
品牌 苹果 类型 iPhone Z
品牌 苹果 类型 iPhone ZL
TITLE模式解析XML
1.创建一个xml文档
例如:
<?xml version="1.0" encoding="UTF-8" ?>
<PhoneInfo>
<Brand name="华为">
<Type name="P90">
<Item>
<title>标题信息</title>
<link>连接</link>
<description>描述</description>
<pubDate>2020-01-18</pubDate>
</Item>
</Type>
</Brand>
</PhoneInfo>
2.如何使用title解析XML
public class TestTitle {
public static void main(String[] args) throws Exception {
//1.解析器工厂
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
//2.解析器
DocumentBuilder builder = factory.newDocumentBuilder();
//3.DOM对象
Document parse = builder.parse("src/cn/test3/title.xml");
//4.操作DOM对象
NodeList pubDate = parse.getElementsByTagName("pubDate");
//方式一 getTextContent
String textContent =pubDate.item(0).getTextContent();
System.out.println("textContent = " + textContent);
//方式二 getFirstChild getNodeValue
String nodeValue = pubDate.item(0).getFirstChild().getNodeValue();
System.out.println("nodeList = " + nodeValue);
}
}
运行结果
textContent = 2020-01-18
nodeList = 2020-01-18
DOMC模式解析XML
1.创建一个xml文档
<?xml version="1.0" encoding="UTF-8" ?>
<PhoneInfo>
<Brand name="华为">
<Type name="P90"></Type>
</Brand>
<Brand name="苹果">
<Type name="iPhone Z"></Type>
<Type name="iPhone ZL"></Type>
</Brand>
</PhoneInfo>
2.如何使用DOMC模式向xml文档中添加,修改,删除,节点
例如:
public class TestDOMCrud {
public static void main(String[] args) throws Exception {
//1.解析器工厂
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
//2.解析器
DocumentBuilder builder = factory.newDocumentBuilder();
//3.DOM对象
Document document = builder.parse("src/cn/test4/phone.xml");
//4.操作DOM对象
Element brand = document.createElement("Brand");
//增加节点
brand.setAttribute("name", "sanxin");
Element type = document.createElement("Type");
type.setAttribute("name", "p20");
brand.appendChild(type);
document.getElementsByTagName("PhoneInfo").item(0).appendChild(brand);
//修改节点
Element brand1 = (Element) document.getElementsByTagName("Brand").item(2);
brand1.setAttribute("name", "三星");
Element type1 = (Element) document.getElementsByTagName("Type").item(3);
type1.setAttribute("name", "P123");
//删除节点
NodeList brand2 = document.getElementsByTagName("Brand");
Node item = brand2.item(2);
item.getParentNode().removeChild(item);
//保存 设置格式
//DOM源
DOMSource domSource =new DOMSource(document);
//格式化工厂
TransformerFactory transformerFactory = TransformerFactory.newInstance();
//格式化器
Transformer transformer = transformerFactory.newTransformer();
//具体格式
transformer.setOutputProperty(OutputKeys.VERSION, "1.0");
transformer.setOutputProperty(OutputKeys.ENCODING, "utf-8");
transformer.setOutputProperty(OutputKeys.INDENT, "yes");
StreamResult result = new StreamResult(new FileOutputStream("src/cn/test4/phone1.xml"));
transformer.transform(domSource, result);
}
}
添加节点示例运行结果
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<PhoneInfo>
<Brand name="华为">
<Type name="P90"/>
</Brand>
<Brand name="苹果">
<Type name="iPhone Z"/>
<Type name="iPhone ZL"/>
</Brand>
<Brand name="sanxin">
<Type name="p20"/>
</Brand>
</PhoneInfo>
修改节点示例运行结果
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<PhoneInfo>
<Brand name="华为">
<Type name="P90"/>
</Brand>
<Brand name="苹果">
<Type name="iPhone Z"/>
<Type name="iPhone ZL"/>
</Brand>
<Brand name="三星">
<Type name="P123"/>
</Brand>
</PhoneInfo>
删除节点示例运行结果
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<PhoneInfo>
<Brand name="华为">
<Type name="P90"/>
</Brand>
<Brand name="苹果">
<Type name="iPhone Z"/>
<Type name="iPhone ZL"/>
</Brand>
</PhoneInfo>
DOM4J模式解析XML
注意:需要先下载dom4j的jar包,在
https://dom4j.github.io下载后将相应的jar包加入工程就可以使用了。
1.创建一个xml文档
例如:
<?xml version="1.0" encoding="UTF-8" ?>
<PhoneInfo>
<Brand name="华为">
<Type name="P90"></Type>
</Brand>
<Brand name="苹果">
<Type name="iPhone Z"></Type>
<Type name="iPhone ZL"></Type>
</Brand>
</PhoneInfo>
2.如何使用dom4j模式向xml文档中添加,修改,删除节点
public class TestDOM4J {
public static void main(String[] args) throws IOException, Exception {
//1.SAXReader
SAXReader saxReader = new SAXReader();
//2.DOM对象
Document document = saxReader.read("src/cn/test5/phone.xml");
System.out.println("document.asXMl() = " + document.asXML());
//3.根标签
Element rootElement = document.getRootElement();
//4.操作根标签
//增加
Element brand = rootElement.addElement("Brand");
brand.setAttributeValue("name", "SAMSUNG");
Element type = rootElement.addElement("Type");
type.setAttributeValue("name", "T123");
//修改
brand.setAttributeValue("name", "三星");
type.setAttributeValue("name", "T321");
//删除
rootElement.remove(brand);
rootElement.remove(type);
//保存
//格式
OutputFormat format = OutputFormat.createPrettyPrint();
format.setEncoding("UTF-8");
XMLWriter writer= new XMLWriter(new FileWriter("src/cn/test5/DOM4j解析.xml"),format);
writer.write(document);
writer.close();
}
}
添加节点运行结果
<?xml version="1.0" encoding="UTF-8"?>
<PhoneInfo>
<Brand name="华为">
<Type name="P90"/>
</Brand>
<Brand name="苹果">
<Type name="iPhone Z"/>
<Type name="iPhone ZL"/>
</Brand>
<Brand name="SAMSUNG"/>
<Type name="T123"/>
</PhoneInfo>
修改节点运行结果
<?xml version="1.0" encoding="UTF-8"?>
<PhoneInfo>
<Brand name="华为">
<Type name="P90"/>
</Brand>
<Brand name="苹果">
<Type name="iPhone Z"/>
<Type name="iPhone ZL"/>
</Brand>
<Brand name="三星"/>
<Type name="T321"/>
</PhoneInfo>
删除节点运行结果
<?xml version="1.0" encoding="UTF-8"?>
<PhoneInfo>
<Brand name="华为">
<Type name="P90"/>
</Brand>
<Brand name="苹果">
<Type name="iPhone Z"/>
<Type name="iPhone ZL"/>
</Brand>
</PhoneInfo>