书架.xml
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<书架>
<书>
<书名>钢铁是怎样炼成的</书名>
<作者>奥斯特洛夫斯基</作者>
<售价>69</售价>
</书>
<书>
<书名>呐喊</书名>
<作者>鲁迅</作者>
<售价>25</售价>
</书>
</书架>
代码
package DTD校验xml规范;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.logging.StreamHandler;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.ParserConfigurationException;
import javax.xml.transform.Transformer;
import javax.xml.transform.TransformerFactory;
import javax.xml.transform.dom.DOMSource;
import javax.xml.transform.stream.StreamResult;
import org.junit.Test;
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;
public class testJAXPcrud {
/**
* @param args
* 用dom方式对xml进行CRUD
*/
//得到指定元素内容
//@Test
public void readElemnt() throws Exception{
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
DocumentBuilder builder = factory.newDocumentBuilder();
Document document= builder.parse("书架.xml");
NodeList list = document.getElementsByTagName("书名");
Node node = list.item(1);
String content = node.getTextContent();
System.out.println(content);
}
//得到所有标签
//@Test
public void readAllFlag() throws Exception{
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
DocumentBuilder builder = factory.newDocumentBuilder();
Document document= builder.parse("书架.xml");
Node root = document.getElementsByTagName("书架").item(0);
list(root);
}
private void list(Node node){
if(node instanceof Element){
System.out.println(node.getNodeName());
}
NodeList list = node.getChildNodes();
for(int i = 0;i<list.getLength();i++){
Node child = list.item(i);
list(child);
}
}
//得到元素属性的值 <书名 name="xxx">钢铁是怎样炼成的</书名>
//@Test
public void readFlagAttribute() throws Exception{
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
DocumentBuilder builder = factory.newDocumentBuilder();
Document document= builder.parse("书架.xml");
Element bookname = (Element) document.getElementsByTagName("书名").item(0);
String value = bookname.getAttribute("name");
System.out.println(value);
}
//@Test
//往指定标签下的指定位置插入子标签
public void addAttribute() throws Exception{
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
DocumentBuilder builder = factory.newDocumentBuilder();
Document document= builder.parse("书架.xml");
//创建要插入的节点
Element price = document.createElement("售价");
price.setTextContent("59.00元");
//得到要插入位置的参考标签
Element refNode = (Element) document.getElementsByTagName("售价").item(0);
//得到要添加节点的父节点
Element book = (Element) document.getElementsByTagName("书").item(0);
//往book指定位置添加
book.insertBefore(price, refNode);
//把更新后内存里的内容写回xml
TransformerFactory tfactory = TransformerFactory.newInstance();
Transformer tf = tfactory.newTransformer();
tf.transform(new DOMSource(document), new StreamResult(new FileOutputStream("书架.xml")));
}
//@Test
//往指定标签下插入属性 <书名 name="xxx">钢铁是怎样炼成的</书名>
public void addFlagAttribute() throws Exception{
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
DocumentBuilder builder = factory.newDocumentBuilder();
Document document= builder.parse("书架.xml");
//得到要插入的标签
Element element = (Element) document.getElementsByTagName("书名").item(0);
element.setAttribute("name", "xxx");
//把更新后内存里的内容写回xml
TransformerFactory tfactory = TransformerFactory.newInstance();
Transformer tf = tfactory.newTransformer();
tf.transform(new DOMSource(document), new StreamResult(new FileOutputStream("书架.xml")));
}
//@Test
//删除标签
public void deleteFlag() throws Exception{
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
DocumentBuilder builder = factory.newDocumentBuilder();
Document document= builder.parse("书架.xml");
//得到要删除的标签
Element element = (Element) document.getElementsByTagName("售价").item(0);
element.getParentNode().removeChild(element);
//或者
//得到要删除的标签的父标签
//Element book = (Element) document.getElementsByTagName("书").item(0);
//book.removeChild(element);
//或者
//element.removeAttribute("售价");
//把更新后内存里的内容写回xml
TransformerFactory tfactory = TransformerFactory.newInstance();
Transformer tf = tfactory.newTransformer();
tf.transform(new DOMSource(document), new StreamResult(new FileOutputStream("书架.xml")));
}
//@Test
//更新售价标签
public void updateFlag() throws Exception{
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
DocumentBuilder builder = factory.newDocumentBuilder();
Document document= builder.parse("书架.xml");
//得到要更新的标签
Element element = (Element) document.getElementsByTagName("售价").item(0);
element.setTextContent("69");
//把更新后内存里的内容写回xml
TransformerFactory tfactory = TransformerFactory.newInstance();
Transformer tf = tfactory.newTransformer();
tf.transform(new DOMSource(document), new StreamResult(new FileOutputStream("书架.xml")));
}
}