创建一个java.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE classes SYSTEM "bin//parser//java.dtd">
<classes>
<java班 name="CSDNJava01班">
<teachers>
<teacher name="军哥" sex="男" age="28" />
<teacher name="刘丽华" sex="女" age="28" />
</teachers>
<students>
<student id="M121780">
<name>张根硕</name>
<sex>男</sex>
<age>28</age>
</student>
</students>
</java班>
<!-- 注释0 -->
<net班 name="CSDNNet01班">
<teachers>
<teacher name="Boss姚" sex="男" age="28" />
<teacher name="石艳芳" sex="女" age="28" />
</teachers>
</net班>
<php班 name="CSDNPhp01班"></php班>
<ios班 name="CSDNIos01班"></ios班>
</classes>
java.dtd
<!ELEMENT classes (java班,net班,php班,ios班)>
<!ELEMENT java班 (teachers?,students?)>
<!ELEMENT net班 (teachers?,students?)>
<!ELEMENT php班 (teachers?,students?)>
<!ELEMENT ios班 (teachers?,students?)>
<!ELEMENT teachers (teacher*)>
<!ELEMENT teacher EMPTY>
<!ELEMENT students (student*)>
<!ELEMENT student (name,sex,age)>
<!ATTLIST java班 name CDATA #IMPLIED>
<!ATTLIST net班 name CDATA #IMPLIED>
<!ATTLIST php班 name CDATA #IMPLIED>
<!ATTLIST ios班 name CDATA #IMPLIED>
<!ATTLIST teacher name CDATA #IMPLIED>
<!ATTLIST teacher sex CDATA #IMPLIED>
<!ATTLIST teacher age CDATA #IMPLIED>
<!ELEMENT name (#PCDATA)>
<!ELEMENT sex (#PCDATA)>
<!ELEMENT age (#PCDATA)>
<!ATTLIST student id ID #IMPLIED>
获得各节点类型的值
public class Test01 {
//@Test
public void testTypeValue(){
System.out.println("元素节点的类型值:"+Node.ELEMENT_NODE);
System.out.println("属性节点的类型值:"+Node.ATTRIBUTE_NODE);
System.out.println("文本节点的类型值:"+Node.TEXT_NODE);
System.out.println("注释节点的类型值:"+Node.COMMENT_NODE);
System.out.println("节点声明的类型值:"+Node.DOCUMENT_TYPE_NODE);
System.out.println("实体节点的类型值:"+Node.ENTITY_NODE);
System.out.println("文档节点类型值:"+Node.DOCUMENT_NODE);
}
根据标签的名称查找所有该名称的节点对象
public void findNode(Document document){
NodeList nodeList=document.getElementsByTagName("teacher");
for(int i=0;i<nodeList.getLength();i++){
Node node=nodeList.item(i);
System.out.println(node.getNodeName());
}
}
根据属性的值查询某个节点对象
public Node findByAttrValue(Document document,String value){
NodeList nodeList=document.getElementsByTagName("teacher");
for(int i=0;i<nodeList.getLength();i++){
Element node=(Element) nodeList.item(i);
Attr attr=node.getAttributeNode("name");
if(attr.getNodeValue().equals(value)){
return node;
}
System.out.println("----");
}
return null;
}
public void test() throws SAXException, IOException, ParserConfigurationException{
Document document=DocumentBuilderFactory.newInstance().newDocumentBuilder().parse(this.getClass().getClassLoader().getResourceAsStream("parser//java.xml"));
findByAttrValue(document,"Boss姚");
根据id获取某个节点对象
public Node findNodeById(Document document,String id){
Node node= document.getElementById(id);
System.out.println(node.getNodeName());
return node;
//return document.getElementById(id);
}
public void test() throws SAXException, IOException, ParserConfigurationException{
Document document=DocumentBuilderFactory.newInstance().newDocumentBuilder().parse(this.getClass().getClassLoader().getResourceAsStream("parser//java.xml"));
findNodeById(document, "M121780");
删除某个节点对象
public void deleteNodeById(Document document,String id) throws TransformerException{
Node node=document.getElementById(id);
//是通过父节点调用removeChild(node)把子节点删除掉
Node node1=node.getParentNode().removeChild(node);
System.out.println(node1+"----"+node);
TransformerFactory transformerFactory=TransformerFactory.newInstance();
Transformer transformer=transformerFactory.newTransformer();
//文档对象,写出的文件的StreamResult对象
transformer.transform(new DOMSource(document), new StreamResult(new File("src//a.xml")));
}
public void test() throws SAXException, IOException, ParserConfigurationException{
Document document=DocumentBuilderFactory.newInstance().newDocumentBuilder().parse(this.getClass().getClassLoader().getResourceAsStream("parser//java.xml"));
try {
deleteNodeById(document, "M121780");
} catch (TransformerException e) {
// TODO Auto-generated catch block
System.out.println("发现异常了---");
e.printStackTrace();
}
a.xml
<?xml version="1.0" encoding="UTF-8" standalone="no"?><classes>
<java班 name="CSDNJava01班">
<teachers>
<teacher age="28" name="军哥" sex="男"/>
<teacher age="28" name="刘丽华" sex="女"/>
</teachers>
<students>
</students>
</java班>
<!-- 注释0 -->
<net班 name="CSDNNet01班">
<teachers>
<teacher age="28" name="Boss姚" sex="男"/>
<teacher age="28" name="石艳芳" sex="女"/>
</teachers>
</net班>
<php班 name="CSDNPhp01班"/>
<ios班 name="CSDNIos01班"/>
</classes>
更新某个节点
public void updateNodeById(Document document,String id) throws TransformerException{
Element node=document.getElementById(id);
Attr attr=node.getAttributeNode("id");
attr.setValue("M121781");
//是通过父节点调用removeChild(node)把子节点删除掉
NodeList nodelist=node.getChildNodes();
for(int i=0;i<nodelist.getLength();i++){
Node n=nodelist.item(i);
if(n.getNodeType()==Node.ELEMENT_NODE){
if(n.getNodeName().equals("name")){
n.setTextContent("张三");
}else if(n.getNodeName().equals("age")){
n.setTextContent("34");
}else if(n.getNodeName().equals("sex")){
n.setTextContent("男");
}else{
System.out.println("不做处理");
}
}
}
TransformerFactory transformerFactory=TransformerFactory.newInstance();
Transformer transformer=transformerFactory.newTransformer();
//文档对象,写出的文件的StreamResult对象
transformer.transform(new DOMSource(document), new StreamResult(new File("src//b.xml")));
}
public void test() throws SAXException, IOException, ParserConfigurationException{
Document document=DocumentBuilderFactory.newInstance().newDocumentBuilder().parse(this.getClass().getClassLoader().getResourceAsStream("parser//java.xml"));
try {
updateNodeById(document, "M121780");
} catch (TransformerException e) {
// TODO Auto-generated catch block
System.out.println("发现异常了---");
e.printStackTrace();
}
b.xml
<?xml version="1.0" encoding="UTF-8" standalone="no"?><classes>
<java班 name="CSDNJava01班">
<teachers>
<teacher age="28" name="军哥" sex="男"/>
<teacher age="28" name="刘丽华" sex="女"/>
</teachers>
<students>
<student id="M121781">
<name>张三</name>
<sex>男</sex>
<age>34</age>
</student>
</students>
</java班>
<!-- 注释0 -->
<net班 name="CSDNNet01班">
<teachers>
<teacher age="28" name="Boss姚" sex="男"/>
<teacher age="28" name="石艳芳" sex="女"/>
</teachers>
</net班>
<php班 name="CSDNPhp01班"/>
<ios班 name="CSDNIos01班"/>
</classes>
在指定的节点下方添加一个新的节点
public void addNodeById(Document document,String id) throws TransformerException{
Element node=document.getElementById(id);
Node parentNode=node.getParentNode();
Element nd=document.createElement("student");
nd.setAttribute("id", "M121782");
Node name=document.createElement("name");
name.appendChild(document.createTextNode("李斯"));
Node age=document.createElement("age");
age.appendChild(document.createTextNode("20"));
Node sex=document.createElement("sex");
sex.appendChild(document.createTextNode("男"));
nd.appendChild(name);
nd.appendChild(age);
nd.appendChild(sex);
parentNode.appendChild(nd);
TransformerFactory transformerFactory=TransformerFactory.newInstance();
Transformer transformer=transformerFactory.newTransformer();
//文档对象,写出的文件的StreamResult对象
transformer.transform(new DOMSource(document), new StreamResult(new File("src//c.xml")));
}
public void test() throws SAXException, IOException, ParserConfigurationException{
Document document=DocumentBuilderFactory.newInstance().newDocumentBuilder().parse(this.getClass().getClassLoader().getResourceAsStream("parser//java.xml"));
try {
addNodeById(document, "M121780");
} catch (TransformerException e) {
// TODO Auto-generated catch block
System.out.println("发现异常了---");
e.printStackTrace();
}
c.xml
<?xml version="1.0" encoding="UTF-8" standalone="no"?><classes>
<java班 name="CSDNJava01班">
<teachers>
<teacher age="28" name="军哥" sex="男"/>
<teacher age="28" name="刘丽华" sex="女"/>
</teachers>
<students>
<student id="M121780">
<name>张根硕</name>
<sex>男</sex>
<age>28</age>
</student>
<student id="M121782"><name>李斯</name><age>20</age><sex>男</sex></student></students>
</java班>
<!-- 注释0 -->
<net班 name="CSDNNet01班">
<teachers>
<teacher age="28" name="Boss姚" sex="男"/>
<teacher age="28" name="石艳芳" sex="女"/>
</teachers>
</net班>
<php班 name="CSDNPhp01班"/>
<ios班 name="CSDNIos01班"/>
</classes>