XML(五):逐步分析DOM解析XML之修改和删除

一、修改

XML源文件如下:

<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<PhoneInfo>
    <Brand name="华为">
        <Type name="123"/>
        <Type name="456"/>
        <Type name="789"/>
    </Brand>
    <Brand name="iphone">
        <Type name="iphone6"/>
        <Type name="iphone7"/>
        <Type name="iphone4"/>
    </Brand>

<Brand name="香蕉">
        <Type name="A1680"/>
    </Brand>
</PhoneInfo>

视频中的示例

要求:在每个Brand标签中再加一个id属性。
具体实现思路如下:先拿出每一个Brand节点,然后通过setAttribute()方法设置一个新的属性。具体代码如下:

 // 修改元素
    public void updateEle() {
        // 获取所有的Brand
        NodeList brands = document.getElementsByTagName("Brand");
        for (int i = 0; i < brands.getLength(); i++) {
            Node brand = brands.item(i);
            Element brandEle = (Element)brand;
            brandEle.setAttribute("id", i + "");
            saveXML();
        }
    }

修改后的XML文件如下:

<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<PhoneInfo>
    <Brand id="0" name="华为">
        <Type name="123"/>
        <Type name="456"/>
        <Type name="789"/>
    </Brand>
    <Brand id="1" name="iphone">
        <Type name="iphone6"/>
        <Type name="iphone7"/>
        <Type name="iphone4"/>
    </Brand>

<Brand id="2" name="香蕉">
        <Type name="A1680"/>
    </Brand>
</PhoneInfo>

书中的实例

要求:将XML文档中的手机品牌信息“iphone”修改为“苹果”。
实现思路:
1、为XML文档构造DOM树。
2、找到符合修改条件的节点。
3、设置该节点的属性为修改值。
4、保存XML文档。
具体代码如下:

// 修改元素:将“iphone”修改为“苹果”
    public void change() {
        NodeList brands = document.getElementsByTagName("Brand");
        for (int i = 0; i < brands.getLength(); i++) {
            Node brand = brands.item(i);
            Element brandEle = (Element)brand;
            String brandName = brandEle.getAttribute("name");
            if (brandName.equals("iphone")) {
                brandEle.setAttribute("name", "苹果");
            }
        }
        saveXML();
    }

运行后的XML文件为:

<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<PhoneInfo>
    <Brand id="0" name="华为">
        <Type name="123"/>
        <Type name="456"/>
        <Type name="789"/>
    </Brand>
    <Brand id="1" name="苹果">
        <Type name="iphone6"/>
        <Type name="iphone7"/>
        <Type name="iphone4"/>
    </Brand>

<Brand id="2" name="香蕉">
        <Type name="A1680"/>
    </Brand>
</PhoneInfo>

二、删除

删除前的XML源文件:

<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<PhoneInfo>
    <Brand id="0" name="华为">
        <Type name="123"/>
        <Type name="456"/>
        <Type name="789"/>
    </Brand>
    <Brand id="1" name="苹果">
        <Type name="iphone6"/>
        <Type name="iphone7"/>
        <Type name="iphone4"/>
    </Brand>

<Brand id="2" name="香蕉">
        <Type name="A1680"/>
    </Brand>
</PhoneInfo>

视频示例

要求:删除手机品牌为华为的那个节点。
思路;把所有的Brand节点拿出来,找到name属性为“华为”的节点,得到这个节点的父节点,通过其父节点删掉这个节点。
具体代码如下:

// 删除华为手机
    public void deleteEle() {
        NodeList brands = document.getElementsByTagName("Brand");
        for (int i = 0; i < brands.getLength(); i++) {
            Node brand = brands.item(i);
            Element brandEle = (Element)brand;
            String brandName = brandEle.getAttribute("name");
            if (brandName.equals("华为")) {
                brandEle.getParentNode().removeChild(brandEle);
            }
        }
        saveXML();
    }

主要是删除的方法:brandEle.getParentNode().removeChild(brandEle);,先拿到当前节点的父节点,通过父节点去删除这个节点。这个节点自己本身是没有权利来删除自己的。
运行之后的XML文件:

<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<PhoneInfo>
    
    <Brand id="1" name="苹果">
        <Type name="iphone6"/>
        <Type name="iphone7"/>
        <Type name="iphone4"/>
    </Brand>

<Brand id="2" name="香蕉">
        <Type name="A1680"/>
    </Brand>
</PhoneInfo>

到此为止,DOM增删改查已全部学习完毕。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,098评论 5 476
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,213评论 2 380
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 149,960评论 0 336
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,519评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,512评论 5 364
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,533评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,914评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,574评论 0 256
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,804评论 1 296
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,563评论 2 319
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,644评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,350评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,933评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,908评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,146评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,847评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,361评论 2 342

推荐阅读更多精彩内容

  •   DOM(文档对象模型)是针对 HTML 和 XML 文档的一个 API(应用程序编程接口)。   DOM 描绘...
    霜天晓阅读 3,609评论 0 7
  •   DOM 1 级主要定义的是 HTML 和 XML 文档的底层结构。   DOM2 和 DOM3 级则在这个结构...
    霜天晓阅读 1,416评论 1 3
  • XML文件源码如下: 一、增 要在PhoneInfo的节点上添加品牌节点,需要先找到PhoneInfo节点。然后在...
    lifeline张阅读 1,281评论 0 1
  • 早餐馄饨:自己包的,虾仁猪肉馅 午餐:牛排,自己煎的。 晚餐:虾仁皮蛋粥
    猫呓啊阅读 97评论 2 1
  • 前几期我们进行了高低姿态,yes and 的练习,这一次,是大家在一起玩的第四次即兴话剧,疲惫的上班结束之后,义无...
    艺珞阅读 318评论 0 0