dom解析: public class Demo1 { /* public static void main(String[] args) throws Exception{ //创建工厂 DocumentBuilderFactory factory=DocumentBuilderFactory.newInstance(); //得到dom解析器 DocumentBuilder builder=factory.newDocumentBuilder(); //对XML文档进行解析,得到代表文档的document Document document=builder.parse("XML/Demo2.xml"); }*/ 获取某个节点的属性 创建工厂->得到dom解析器->对XML文档进行解析,得到代表文档的document //得到第2个书节点,item(index)的index是从0开始的 Node node=list.item(1); String name=node.getTextContent(); System.out.println(name); //得到XML文档中的标签 创建工厂->得到dom解析器->对XML文档进行解析,得到代表文档的document Node list=document.getElementsByTagName("书架").item(0); list(list); } private void list(Node list) { if(list instanceof Element) System.out.println(list.getNodeName()); NodeList l=list.getChildNodes(); for(int i=0;i<l.getLength();i++){ Node child=l.item(i); list(child); } } 得到XML文档中标签的某个属性值:<书名 name="XXX">什么都不知道</书名> 创建工厂->得到dom解析器->对XML文档进行解析,得到代表文档的document //知道是Element了才能强转 Element bookname=(Element)document.getElementsByTagName("书名").item(0); System.out.println(bookname.getAttribute("name"));
添加节点: @Test public void add() throws Exception{ 创建工厂->得到dom解析器->对XML文档进行解析,得到代表文档的document //创建节点 Element element=document.createElement("价钱"); element.setTextContent("45.3元"); //把创建的节点挂在第一本书上 Element book=(Element)document.getElementsByTagName("书").item(0); book.appendChild(element); //这只是在内存中更新,现在将更新后的XMl回写到文档中 //得到转换器的工厂 TransformerFactory tf=TransformerFactory.newInstance(); //得到转换器 Transformer t=tf.newTransformer(); //调用Transformer的。。。方法将docuemnt转到文件中去 t.transform(new DOMSource(document),new StreamResult(new FileOutputStream("src/Demo2.xml"))); } @Test //节点增填到制定的位置 public void add2() throws Exception{ 创建工厂->得到dom解析器->对XML文档进行解析,得到代表文档的document //创节点 Element element=document.createElement("价钱"); element.setTextContent("45.3元"); //得到参考节点 Element e=(Element)document.getElementsByTagName("价钱").item(0); //把创建的节点挂在第一本书上 Element book=(Element)document.getElementsByTagName("书").item(0); book.insertBefore(element,e);//前边的参数是创建后要添加的节点,后边的参数是添加到这个节点的之前的Element //这只是在内存中更新,现在将更新后的XMl回写到文档中 /得到转换器的工厂-》//得到转换器——》//调用Transformer的。。。方法将docuemnt转到文件中去 } 添加属性:element.setAttribute("name","value");
publicvoid addAtt() throws Exception{
Element e=(Element)document.getElementsByTagName("书名").item(0);
e.setAttribute("id","xxx");
}
刪除属性:element.removeAttribute("name");
删除节点:fatherNode.removeChild(childNode);
way1:
/得到要删除的节点
NodeList list=document.getElementsByTagName("价钱");
Node node=list.item(0);
//得到要删除节点的爸爸
Node father=document.getElementsByTagName("书").item(0);
//删除
father.removeChild(node);
//把更新内存回写到文档中(代码省略)
way2:
//得到要删除的节点
NodeList list=document.getElementsByTagName("价钱");
Node node=list.item(0);
//删除
node.getParentNode().removeChild(node);
注意:当内存中的xml内容更新(更改)后,一定记得回写到xml中。