xml解析——增删改查操作后将其修改结果保存

一、可扩展标记语言xml:Extensible Markup Language 
   1、XML的作用:1)统一数据传输的格式。2)做小型数据库[文件型数据库]。3)做配置文件  .ini   .propertity  .xml  .cfg 
   2、XML文件的基本格式: 
     标签:分为双标签和单标签,双标签的开头和结尾标签名必须一致,大小写一样,/ 开头的是结尾标签,单标签必须在 > 前加上 / 来结尾,单标签中不能放文本。 
     属性:在开始标签中定义一些名值对,值一定是字符串 
   3、XML文件的基本构成: 
     1)在第一行是XML声明    <?xml version="1.0" encoding="UTF-8"  ?> 
     2)必须且只能有一对根标签 
     3)标签可以一层一层嵌 


二、写一个简单的xml文档stus.xml然后用Dom进行解析。 
    DOM : Document Object Model 文档对象模型 
    DOM解析的基本思路:将整个XML文件一次性读入内存,将整个XML看做一棵文档树,XML中的每一个标签,属性,文本都看做是树上的一个结点,然后可以对结点进行增删改查的操作。 
   已经编辑好的stus.xml文档 


Java代码  收藏代码
<?xml version="1.0" encoding="UTF-8"?>  
<stus Class="1401" >  
    <stu num="01">  
        <name>张三</name>  
        <age>19</age>  
        <sex>男</sex>  
    </stu>  
    <stu  num="02">  
        <name>李四</name>  
        <age>20</age>  
        <sex>女</sex>  
    </stu>  
    <stu  num="03">  
        <name>王五</name>  
        <age>21</age>  
        <sex>男</sex>  
    </stu>  
</stus>  




三、开始解析 
    创建解析工厂 


Java代码  收藏代码
// 得到解析工厂对象  
        DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();  
        // 生产一个解析器对象  
        DocumentBuilder builder = factory.newDocumentBuilder();  
        // 开始解析xml文件,得到的解析结果是一个Document对象,Document对象叫做文档树对象  
        Document document = builder.parse("stus.xml");  


    1、增加节点 
    基本思路:首先创建一个新的元素节点,将元素节点追加到根节点后面,设置其节点属性。创建标签,设置标签文本内容,最后将新标签添加到新的元素节点中。 
代码: 


Java代码  收藏代码
// 创建一个新的元素节点  
        Element stu = dom.createElement("stu");  
        // 将元素节点追加到根节点后面  
        root.appendChild(stu);  
        // 设置节点属性  
        stu.setAttribute("num", "04");  
        // 创建标签  
        Element name = dom.createElement("name");  
        Element age = dom.createElement("age");  
        Element sex = dom.createElement("sex");  
        // 设置标签文本内容  
        name.setTextContent("赵六");  
        age.setTextContent("19");  
        sex.setTextContent("女");  
        // 把标签添加到新的元素节点stu中  
        stu.appendChild(name);  
        stu.appendChild(age);  
        stu.appendChild(sex);  


    2、删除节点 
基本思路:获得要删除的节点,然后得到节点的属性值,与要删除的节点的属性值进行比较,如果该属性值对应的节点存在则移除该节点。 
代码: 


Java代码  收藏代码
// 获得根节点  
        Element root = (Element) dom.getFirstChild();  
        // 获得所有stu节点  
        NodeList list = dom.getElementsByTagName("stu");  
        for (int i = 0; i < list.getLength(); i++) {  
            Node node = list.item(i);  
            if (node instanceof Element) {  
                Element e = (Element) node;  
                // 得到节点的属性值,与要删除的结点的属性值进行比较,然后移除该属性值对应的结点  
                String num = e.getAttribute("num");  
                if (num.equals("02")) {  
                    root.removeChild(e);  
                    break;  
                }  
            }  
        }  




    3、修改节点 
基本思路:获得要修改的节点,修改其属性值,然后获得该节点下的标签,修改标签中的文本内容。 
代码: 




Java代码  收藏代码
// 修改节点属性  
        for (int j = 0; j < list.getLength(); j++) {  
            Node no = list.item(j);  
            if (no instanceof Element) {  
                Element el = (Element) no;  
                String n = el.getAttribute("num");  
                if (n.contains("01")) {  
                    el.setAttribute("num", "05");  
                    // 修改标签值  
                    NodeList li = el.getChildNodes();  
                    for (int x = 0; x < li.getLength(); x++) {  
                        Node d = li.item(x);  
                        if (d instanceof Element) {  
                            Element ee = (Element) d;  
                            String noN = ee.getNodeName();  
                            if (noN.equals("name")) {  
                                ee.setTextContent("小白");  
                            } else if (noN.equals("age")) {  
                                ee.setTextContent("11");  
                            } else if (noN.equals("sex")) {  
                                ee.setTextContent("男");  
                            }  
                        }  
                    }  
                }  




4、查找节点 
基本思路:获得所有的节点,用 需要查找的结点的属性值与所有节点进行比较,如果该节点存在,就打印该节点的属性值及其节点下标签的内容。 
代码: 


Java代码  收藏代码
for (int j = 0; j < list.getLength(); j++) {  
    Node no = list.item(j);  
    if (no instanceof Element) {  
        Element el = (Element) no;  
        String n = el.getAttribute("num");  
        //查找节点,显示其属性值及标签内容  
        if(n.equals("03")){  
            System.out.println(no.getNodeName()+"\t"+n+no.getTextContent());  
        }  
    }  
}  






4、保存修改后的xml文档 
基本思路:先将内存中的Document对象写到xml文件中,然后将整个Document对象作为要写入xml文件的数据源,最后将数据源写入目标文件。 
代码: 


Java代码  收藏代码
// 将内存中的Document对象写到xml文件中  
        TransformerFactory tf = TransformerFactory.newInstance();  
        Transformer former = tf.newTransformer();  
        former.setParameter("version", "1.0");  
        former.setParameter("encoding", "GBK");  
        // 将整个Document对象作为要写入xml文件的数据源  
        DOMSource xmlSource = new DOMSource(dom);  
        // 要写入的目标文件  
        StreamResult outputTarget = new   
                StreamResult(new File("F:\\stus2.xml"));  
        former.transform(xmlSource, outputTarget);  
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值