使用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中

 

 

  




 

转载于:https://www.cnblogs.com/08love125/articles/5436680.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值