XML的两种解析方式:
DOM:根据xml的层级结构在内存中分配一个属性结构,将xml的标签,属性,文本都当做对象
优点:很方便的进行节点的增删改
缺点:如果文件过大,会造成内存溢出
SAX:采用事件驱动,边读边解析,从上到下一行一行的解析,解析到某一个对象将对象名称返回
优点:不会出现内存溢出,方便实现查询
缺点:不能进行增删改操作.
DOM和SAX是解析技术,但是需要解析器进行解析
sun公司的jaxp解析器,jdk中包含
dom4j公司的dom4j解析器,常用
jdom公司的jdom解析器
每个解析器都包含DOM和SAX技术
JAXP解析器
// 获取解析器工厂
DocumentBuilderFactory domFactory = DocumentBuilderFactory.newInstance();
// 获取解析器
DocumentBuilder domBuider = domFactory.newDocumentBuilder();
// 根据文件路径获取文档对象
Document dom = domBuider.parse("xml01/person.xml");
// 根据标签名获取标签对象集合
NodeList nameList = dom.getElementsByTagName("name");
for (int i = 0; i < nameList.getLength(); i++)
{
// 通过item(i)方法,获取第i个节点
Node node = nameList.item(i);
// 获取节点内容
String text = node.getTextContent();
System.out.println(text);
}
NodeList personList = dom.getElementsByTagName("person");
// 获取第一个person对象
Node per = personList.item(0);
// 创建一个节点元素
Element sex = dom.createElement("sex");
// 创建一个文本元素
Text men = dom.createTextNode("men");
// 将文本元素追加到节点元素中
sex.appendChild(men);
// 将sex节点添加到第一个person中
per.appendChild(sex);
将内存中修改的内容保存到XML文件中
// 将内存中的修改保存到文件中
// 获取转变工厂
TransformerFactory transformerFactory = TransformerFactory.newInstance();
// 获取转变对象
Transformer transformer = transformerFactory.newTransformer();
// 将内存对象转存到文件中
transformer.transform(new DOMSource(dom), new StreamResult("xml01/person2.xml"));