【java高级】DOM解析XML技术-----【代码演示】

​​​​​​​

目录

一、DOM解析XML技术

 二、解析XML技术的步骤


​​​​​​​

一、DOM解析XML技术

  1.    基于XML文档树结构的解析
  2. 适用于多次访问的XML文档
  3. 特点:;比较消耗资源

 二、解析XML技术的步骤

<?xml version="1.0" encoding="GB2312"?>
<PhoneInfo>
    <Brand name="华为">
        <Type>Mate30</Type>
        <Type>Mate40</Type>
        <Type>Mate50</Type>

    </Brand>
    <Brand name="苹果">
        <Type>iphone10</Type>
        <Type>iphone11</Type>
        <Type>iphone12p</Type>
    </Brand>
</PhoneInfo>
  1. 创建解析器工厂对象
  2. 解析器工厂对象创建解析器对象
  3. 解析器对象指定XML文件创建Document对象
  4. 以Document对象为七点操作DOM树 
//创建一个全局变量,Document(表示整个xml文档)
Document document=null;
public void getDocument(){
//创建解析器工厂
DocumentBuilderFcatory factory = DocumentBuildFactory.newInstance();
//用解析器工厂创建解析器
DocumentBuilder builder = factory.newDocumentBuilder();
//利用解析器解析xml文件
document = builder.parse(new FileInputStream("resource\\news.xml"));

}

 获取xml文件中的结点元素的内容

//打印xml中的所有品牌
public void getBrands(){
//获得所有品牌结点(即Node的集合)
NodeList node = document.getElementsByTagName("Brand");
//遍历NodeList集合
for(int i = 0; i<node.getLength(); i++){
//获得每个结点的值
Node item = node.item(i);
//将结点类型转换为元素类型
Element e = (Element)item;
//获得元素的name属性的值
String name = e.getAttribute("name");
System.out.print(name);

}

}

获得Brand节点下的所有子节点

    public void getChildren(){

//获取brand结点(为NodeList类型)
        NodeList node = document.getElementsByTagName("Brand");
//遍历Node结点
        for(int i = 0; i<node.getLength();i++){
            Node item = node.item(i);
            NodeList childItem = item.getChildNodes();
            for(int j =0; j <childItem.getLength(); j++){
                Node child = childItem.item(j);
                if(child instanceof Element){
                    Text text = (Text)child.getFirstChild();
                    System.out.print(text.getWholeText());
                }
            }
        }
    }

修改Brand结点的name属性为iphone,iPhone10修改为iPhone100

    public void change(){
        NodeList node = document.getElementsByTagName("Brand");
        Node nodeSceond = node.item(1);
        Element e = (Element)nodeSceond;
//修改Brand的name属性的值为iPhone
        e.setAttribute("name","iphone");
        NodeList nodeChild = e.getChildNodes();
        for(int i=0;i<nodeChild.getLength();i++){
            Node child = nodeChild.item(i);
            if(child instanceof Element){
                if(child.getFirstChild().getNodeValue().equals("iphone10")){
                    Text text=(Text)child.getFirstChild();
                    text.setData("iphone100");
                    return;
                }
            }
        }

    }

删除结点:

 Node root = document.getElementsByTagName("PhoneInfo").item(0);
        Node iphone = document.getElementsByTagName("Brand").item(1);
        root.removeChild(iphone);

增加结点:

    public void createNode(){
        Node root = document.getElementsByTagName("PhoneInfo").item(0);
        Element brand = document.createElement("Brand");
        brand.setAttribute("name","三星");
        Element type = document.createElement("Type");
        Element type1 = document.createElement("Type");
        Text t = document.createTextNode("Galaxy10");
        Text t1 = document.createTextNode("Galaxy20");

        type.appendChild(t);
        type1.appendChild(t1);
        brand.appendChild(type);
        brand.appendChild(type1);
        root.appendChild(document.createTextNode("\n"));
        root.appendChild(brand);
    }

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值