DOM解析xml
节点:空白节点 文档节点 注释节点 元素节点 属性节点
package com.xml.dom;
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.OutputKeys;
import javax.xml.transform.Transformer;
import javax.xml.transform.TransformerFactory;
import javax.xml.transform.dom.DOMSource;
import javax.xml.transform.stream.StreamResult;
import java.io.FileOutputStream;
import java.io.IOException;
public class XMLParser {
private Document document;
public void getDocument(){
try {
DocumentBuilderFactory documentBuilderFactory = DocumentBuilderFactory.newInstance();
DocumentBuilder documentBuilder = documentBuilderFactory.newDocumentBuilder();
document = documentBuilder.parse("src/main/resources/phone.xml");
} catch (ParserConfigurationException e) {
e.printstacktrace();
} catch (SAXException e) {
e.printstacktrace();
} catch (IOException e) {
e.printstacktrace();
}
}
/**
* 解析xml内容
*/
public void show(){
NodeList brands = document.getElementsByTagName("Brand");
for (int i = 0; i < brands.getLength(); i++) {
Node node = brands.item(i); //节点:空白节点 文档节点 注释节点 元素节点 属性节点
Element element= (Element)node;
String brandName = element.getAttribute("name");
System.out.println(brandName);
NodeList types = node.getChildNodes();
for (int j = 0; j < types.getLength(); j++) {
Node typeNode = types.item(j);
if (typeNode.getNodeType()== Node.ELEMENT_NODE) {
Element typeElement= (Element)typeNode;
String typeName = typeElement.getAttribute("name");
System.out.println("\t"+typeName);
}
}
}
}
/**
* 添加节点
*/
public void add(){
Element brand = document.createElement("Brand");
brand.setAttribute("name","三星");
Element type = document.createElement("Type");
type.setAttribute("name","NoteX");
brand.appendChild(type);
document.getElementsByTagName("PhoneInfo").item(0).appendChild(brand);
}
/**
* 保存xml
*/
public void save(){
TransformerFactory transformerFactory = TransformerFactory.newInstance();
try {
Transformer transformer = transformerFactory.newTransformer();
transformer.setoutputProperty(OutputKeys.ENCODING,"UTF-8");
DOMSource domSource = new DOMSource(document);
StreamResult streamResult = new StreamResult(new FileOutputStream("src/main/resources/phone.xml"));
transformer.transform(domSource,streamResult);
} catch (Exception e) {
e.printstacktrace();
}
}
/**
* 修改xml
*/
public void update(){
NodeList brands = document.getElementsByTagName("Brand");
for (int i = 0; i < brands.getLength(); i++) {
Element brand=(Element) brands.item(i);
String value = brand.getAttribute("name");
if("三星".equals(value)){
brand.setAttribute("name","SAMSUNG");
}
}
}
/**
* 删除节点
*/
public void delete(){
NodeList brands = document.getElementsByTagName("Brand");
for (int i = 0; i < brands.getLength(); i++) {
Element brand=(Element) brands.item(i);
String value = brand.getAttribute("name");
if("SAMSUNG".equals(value)){
brand.getParentNode().removeChild(brand);
}
}
}
public static void main(String[] args) {
XMLParser xmlParser = new XMLParser();
xmlParser.getDocument();
//xmlParser.add();
//xmlParser.update();
xmlParser.delete();
xmlParser.save();
//xmlParser.show();
}
}
DOM4j解析xml
package com;
import org.dom4j.Document;
import org.dom4j.Element;
import org.dom4j.io.OutputFormat;
import org.dom4j.io.SAXReader;
import org.dom4j.io.XMLWriter;
import java.io.FileWriter;
import java.io.IOException;
import java.net.URL;
import java.util.List;
public class Parser {
private Document document;
/**
* 加载DOM树
*/
public void getDocument(){
try {
SAXReader saxReader=new SAXReader();
//获取xml文件路径
URL url=Parser.class.getClassLoader().getResource("phone.xml");
System.out.println(url);
document= saxReader.read(url);
} catch (Exception e) {
e.printstacktrace();
}
}
public void show(){
//获取XML根节点
Element rootElement=document.getRootElement();
//通过根节点获取子节点
List<Element> elements=rootElement.elements();
//循环读取节点内容
for (Element brandElement:elements){
String brandName=brandElement.attributeValue("name");
System.out.println(brandName);
List<Element> typeElements=brandElement.elements();
for (Element typeElement:typeElements){
String typeName=typeElement.attributeValue("name");
System.out.println(typeName);
}
}
}
//添加节点
public void add(){
Element rootElement=document.getRootElement();
Element brandElement=rootElement.addElement("Brand");
brandElement.addAttribute("name","三星");
Element typeElement=brandElement.addElement("Type");
typeElement.addAttribute("name","NoteX");
}
//修改节点
public void Update(){
Element rootElement=document.getRootElement();
List<Element> elements = rootElement.elements();
for (Element element:elements){
String brandName=element.attributeValue("name");
if("三星".equals(brandName)){
element.addAttribute("三星","SAMSUNG");
}
}
}
//删除节点
public void delete(){
Element rootElement = document.getRootElement();
List<Element> elements = rootElement.elements();
for (Element element : elements) {
String brandName = element.attributeValue("name");
if("SAMSUNG".equals(brandName)){
rootElement.remove(element);
}
}
}
//对节点操作需保存操作
public void save(){
OutputFormat outputFormat = OutputFormat.createPrettyPrint();
outputFormat.setEncoding("utf-8");
try {
XMLWriter xmlWriter = new XMLWriter(new FileWriter("src/main/resources/phone.xml"),outputFormat);
xmlWriter.write(document);
xmlWriter.close();
} catch (IOException e) {
e.printstacktrace();
}
}
public static void main(String[] args) {
Parser xmlParser=new Parser();
xmlParser.getDocument();
// xmlParser.show();
xmlParser.add();
// xmlParser.Update();
// xmlParser.delete();
//操作完记得保存
xmlParser.save();
}
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。