XML解析——dom
DOM
<?xml version="1.0" encoding="UTF-8"?>
<order>
<orderitem>
<product name="xx"></product>
</orderitem>
</order>
使用Document类代表一个XML文件
DOM解析思路
1.先将XML文件转换为一个Document对象
2.从Document对象上获取根元素
3.通过根元素找其下面的子元素
4.通过元素类型找出Element元素orderitem
5.通过orderitem找出其下子元素
6.通过元素的类型来找出Element元素product
7.通过product找出属性name
src\cn\itcast\cd\dom\products.xml
| <?xml version="1.0" encoding="UTF-8" standalone="no"?>
<products>
<product sn="001">
<name>大米</name>
<price>29.8</price>
<unit>袋</unit>
<weight>5</weight>
</product>
<product sn="002">
<name>馒头</name>
<price>0.5</price>
<unit>个</unit>
<weight>0.02</weight>
</product>
</products> |
src\cn\itcast\cd\dom\Product.java
| package cn.itcast.cd.dom;
public class Product {
private String sn;
private String name;
private Double price;
private String unit;
private Double weight;
public String getSn() {
return sn;
}
public void setSn(String sn) {
this.sn = sn;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Double getPrice() {
return price;
}
public void setPrice(Double price) {
this.price = price;
}
public String getUnit() {
return unit;
}
public void setUnit(String unit) {
this.unit = unit;
}
public Double getWeight() {
return weight;
}
public void setWeight(Double weight) {
this.weight = weight;
}
@Override
public String toString() {
return "product:" + "[" + sn + "," + name + "," + price + "," + unit + "," + weight + "]";
}
|
Product是一个Product实体类
src\cn\itcast\cd\dom\ProductDAO.java
| package cn.itcast.cd.dom;
import java.io.File;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.ParserConfigurationException;
import javax.xml.transform.Result;
import javax.xml.transform.Source;
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.Attr;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.NodeList;
import org.xml.sax.SAXException;
import cn.itcast.cd.dom.Product;
public class ProductDAO {
// 当前CLASSPATH
private String xmlFilePath;
public ProductDAO() {
super();
}
public ProductDAO(String xmlFilePath) {
this();
this.xmlFilePath = xmlFilePath;
}
// 获取一个xml文件的Document对象
private Document getDocument() {
Document document = null;
try {
DocumentBuilderFactory documentBuilderFactory = DocumentBuilderFactory
.newInstance();
DocumentBuilder documentBuilder = documentBuilderFactory
.newDocumentBuilder();
document = documentBuilder.parse(new File(this.xmlFilePath));
} catch (Exception e) {
e.printStackTrace();
}
return document;
}
// 将在内在中创建的xml写入到文件
private void saveDocument(Document document) {
Source xmlSource = new DOMSource(document);
Result outputTarget = new StreamResult(
new File(
"E:/Work/Workspace/MySelf/eclipse/day3/src/cn/itcast/cd/dom/products.xml"));
try {
Transformer transformer = TransformerFactory.newInstance()
.newTransformer();
transformer.transform(xmlSource, outputTarget);
} catch (Exception e) {
e.printStackTrace();
}
}
// 获取xml文件中所有的Product
public List<Product> list() {
List<Product> list = new ArrayList<Product>();
Document document = getDocument();
NodeList productNodes = document.getElementsByTagName("product");
for (int i = 0; i < productNodes.getLength(); i++) {
Element productElement = (Element) productNodes.item(i);
Product product = new Product();
product.setSn(productElement.getAttribute("sn"));
product.setName(productElement.getElementsByTagName("name").item(0)
.getTextContent());
product.setPrice(Double.parseDouble(productElement
.getElementsByTagName("price").item(0).getTextContent()));
product.setUnit(productElement.getElementsByTagName("unit").item(0)
.getTextContent());
product.setWeight(Double.parseDouble(productElement
.getElementsByTagName("weight").item(0).getTextContent()));
list.add(product);
}
return list;
}
// 通过Product的sn获取一个Product
public Product getBySn(String sn) {
Product product = new Product();
Document document = getDocument();
NodeList productNodes = document.getElementsByTagName("product");
for (int i = 0; i < productNodes.getLength(); i++) {
Element productElement = (Element) productNodes.item(i);
if (productElement.getAttribute("sn").equals(sn)) {
product.setSn(productElement.getAttribute("sn"));
product.setName(productElement.getElementsByTagName("name")
.item(0).getTextContent());
product.setPrice(Double
.parseDouble(productElement
.getElementsByTagName("price").item(0)
.getTextContent()));
product.setUnit(productElement.getElementsByTagName("unit")
.item(0).getTextContent());
product.setWeight(Double.parseDouble(productElement
.getElementsByTagName("weight").item(0)
.getTextContent()));
break;
}
}
return product;
}
// 在xml文件中添加一个Product
public void add(Product product) {
Document document = getDocument();
// 创建product元素
Element productElement = document.createElement("product");
// 创建product的name子元素
Element nameElement = document.createElement("name");
// 创建product的price子元素
Element priceElement = document.createElement("price");
// 创建product的unit子元素
Element unitElement = document.createElement("unit");
// 创建product的weight子元素
Element weightElement = document.createElement("weight");
// 给product元素添加sn属性
productElement.setAttribute("sn", product.getSn());
// 给product元素添加name子元素
productElement.appendChild(nameElement);
nameElement.setTextContent(product.getName());
// 给product元素添加price子元素
productElement.appendChild(priceElement);
priceElement.setTextContent(product.getPrice().toString());
// 给product元素添加unit子元素
productElement.appendChild(unitElement);
unitElement.setTextContent(product.getUnit());
// 给product元素添加name子元素
productElement.appendChild(weightElement);
weightElement.setTextContent(product.getWeight().toString());
// 获取根元素
Element rootElement = document.getDocumentElement();
// 在根元素下添加product元素
rootElement.appendChild(productElement);
// 将内存中XML树写入文件
saveDocument(document);
}
// 通过Product的sn删除xml文件中的一个Product
public void remove(String sn) {
Document document = getDocument();
Element rootElement = document.getDocumentElement();
NodeList productNodes = document.getElementsByTagName("product");
for (int i = 0; i < productNodes.getLength(); i++) {
Element productElement = (Element) productNodes.item(i);
if (productElement.getAttribute("sn").equals(sn)) {
rootElement.removeChild(productElement);
saveDocument(document);
break;
}
}
}
// 修改xml文件中Product
public void modify(Product product) {
Document document = getDocument();
NodeList productNodes = document.getElementsByTagName("product");
for (int i = 0; i < productNodes.getLength(); i++) {
Element productElement = (Element) productNodes.item(i);
if (productElement.getAttribute("sn").equals(product.getSn())) {
productElement.getElementsByTagName("name").item(0).setTextContent(product.getName());
productElement.getElementsByTagName("price").item(0).setTextContent(product.getPrice().toString());
productElement.getElementsByTagName("unit").item(0).setTextContent(product.getUnit());
productElement.getElementsByTagName("weight").item(0).setTextContent(product.getWeight().toString());
saveDocument(document);
break;
}
}
}
} |
ProductDAO是一个Domain Access Object
src\cn\itcast\cd\dom\ProductTest.java
| package cn.itcast.cd.dom;
public class ProductTest {
public static void main(String[] args) {
String currentPath = ProductDAO.class.getResource("").getPath()
+ "products.xml";
ProductDAO productDAO = new ProductDAO(currentPath);
// 获取xml文件中所有的Product
/*for (Product product : productDAO.list()) {
System.out.println(product);
}*/
// 通过Product的sn获取一个Product
/*System.out.println(productDAO.getBySn("002"));*/
/* Product product = new Product();
product.setSn("003");
product.setName("馒头");
product.setPrice(0.5);
product.setUnit("个");
product.setWeight(0.02);*/
// 添加一个Product
/* productDAO.add(product);*/
// 通过sn删除xml中的一个Product
/*productDAO.remove("003");*/
/*Product product = new Product();
product.setSn("002");
product.setName("馒头");
product.setPrice(0.5);
product.setUnit("个");
product.setWeight(0.02);*/
// 修改xml中的一个Product
/*productDAO.modify(product);*/
}
|
ProductTest是一个测试类

浙公网安备 33010602011771号