一:xml的具体内容我不想说太多细节,因为这玩意现在差不多被注解给替代了,了解一下即可,要不是我们公司的系统这么老,怕有时候需要写一些解析xml的工具类,我才懒得去看,还有一点就是为了反射去学它的!
二:
2.1:xml的约束文件: dtd(比较老)和schema
2.2:xml的解析技术: DOM和SAX
想要解析xml,首先需要解析器不同的公司和组织提供了 针对dom和sax方式的解析器,通过api方式提供
sun公司提供了针对dom和sax解析器 jaxp
dom4j组织,针对dom和sax解析器 dom4j(*** 实际开发中****)
jdom组织,针对dom和sax解析器 jdom
注:我是想用dom4j的,但是我们公司没有dom4j的jar包,没有办法! 推荐去学dom4j
jaxp是jdk自带的!!!jaxp针对Dom 和 SAX技术都有实现!!
三:
接下来使用jaxp的DOM操作为大家演示个代码案例就完了!!
注意:主要是对xml的增删改查, 更新操作需要回写XML
person.xml
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<person>
<p>
<name>张三</name>
<age>20</age>
</p>
<p>
<name>李四</name>
<age>20</age>
</p>
</person>
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.TransformerFactoryConfigurationError;
import javax.xml.transform.dom.DOMSource;
import javax.xml.transform.stream.StreamResult;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;
import org.w3c.dom.Text;
import org.xml.sax.SAXException;
public class XmlDemo {
public static void main(String[] args) throws Exception {
findAllElement();
// deleteSex();
// updatSex();
// addSex();
// selectFirstName();
// selectAllName();
}
//把xml中的所有元素名称打印出来
private static void findAllElement()throws Exception {
Document document = createParser();
recursion(document); //递归
}
//Node是Document的父接口!,根据里氏代换原则这里是ok的
private static void recursion(Node node) {
//判断是元素节点才打印!!!
if(node.getNodeType() == Node.ELEMENT_NODE) {
String nodeName = node.getNodeName();
System.out.println("节点名字:"+nodeName);
}
//只能获取一层
NodeList nodeList = node.getChildNodes();
for(int index=0; index<nodeList.getLength(); index++) {
Node nextNode = nodeList.item(index);
recursion(nextNode);
}
}
//删除<sex>男</sex>节点
private static void deleteSex()throws Exception {
Document document = createParser();
//先得到sex元素
Node item = document.getElementsByTagName("sex").item(0);
//再得到sex的父节点
Node parentNode = item.getParentNode();
//让父节点删除子节点
parentNode.removeChild(item);
//回写xml
writeBackXML(document);
}
//修改第一个p下面的sex元素为男
private static void updatSex()throws Exception {
//创建解析器
Document document = createParser();
//得到第一个sex
Node item = document.getElementsByTagName("sex").item(0);
item.setTextContent("男");
writeBackXML(document);
}
//在第一个p的末尾添加<sex>女<sex>
private static void addSex()throws Exception {
Document document = createParser();
NodeList nodeList = document.getElementsByTagName("p");
Node node = nodeList.item(0);
//使用document对象创建一个元素
Element sexElement = document.createElement("sex");
//使用document对象创建一个文本
Text text = document.createTextNode("女");
//把文本添加到元素中
sexElement.appendChild(text);
//再把元素添加到name元素中!
node.appendChild(sexElement);
//回写xml Transformer:变压器的意思
writeBackXML(document);
//注意:会写完xml后,里面的格式很乱,需要format一下, dom4j对格式的支持就比较好!
}
//获取第一个name下面的内容
private static void selectFirstName() throws Exception {
Document document = createParser();
NodeList nodeList = document.getElementsByTagName("name");
Node node = nodeList.item(0);
System.out.println(node.getTextContent());
}
//获取所有name下面的内容
private static void selectAllName() throws Exception {
Document document = createParser();
NodeList nodeList = document.getElementsByTagName("name");
System.out.println(nodeList.getLength());
for(int index=0; index<nodeList.getLength(); index++) {
Node item = nodeList.item(index);
System.out.println(item.getTextContent());
}
}
//开始:创建解析器的操作
private static Document createParser() throws ParserConfigurationException, SAXException, IOException {
DocumentBuilderFactory builderFactory = DocumentBuilderFactory.newInstance();
DocumentBuilder documentBuilder = builderFactory.newDocumentBuilder();
Document document = documentBuilder.parse(new File("person.xml"));
return document;
}
//最后:回写xml操作!!
private static void writeBackXML(Document document)
throws TransformerFactoryConfigurationError, TransformerConfigurationException, TransformerException {
TransformerFactory transformerFactory = TransformerFactory.newInstance();
Transformer transformer = transformerFactory.newTransformer();
transformer.transform(new DOMSource(document), new StreamResult("person.xml"));
}
}