使用JAXP对XML文档进行dom解析

mac2025-11-19  3

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中

 

 

  

 

最新回复(0)