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

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中

 

 

  




 

posted @ 2016-04-26 21:17  戒。  阅读(108)  评论(0编辑  收藏  举报