个人日记:XML追加和覆盖内容,将XML某位置的子标签或者属性,文本删除

这篇博客介绍了如何使用Java的SAXReader和DocumentHelper进行XML文档的修改。主要内容包括如何添加XML子标签和属性,以及如何删除指定属性或标签。通过建立新文档并覆盖原文档的方式实现修改,同时提供了追加内容的实现方式。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

XML添加子标签:
这里使用的是覆盖,即通过建立新文档读取旧文档的属性然后进行添加,最后覆盖原文档完成修改。
如果想要使用添加的话,那么使用document doc=documenthelper.creatdocument;代码建立新的文档,然后进行写入想要添加的内容,最后在输出流 
XMLWriter xmlWriter = new XMLWriter(new FileOutputStream(f), format);这里format改为boolean append,即为追加而不是覆盖
 

public static void add() throws DocumentException, IOException {
        SAXReader saxReader = new SAXReader();
        Document doc = saxReader.read(new File("C:\\Users\\Administrator\\IdeaProjects\\day24\\src\\HW4\\Test.XML"));

        //添加三星手机属性
        Element rootElement = doc.getRootElement();//找到根节点
        Element el = rootElement.addElement("brand");//在根节点下建立brand节点  根据需求在想要的地方建立
        //给brand节点赋值
        el.addAttribute("name","sumsang");
        //给标签赋属性和属性值
        Element type = el.addElement("Type");
        type.addAttribute("name","NOTE4");
        //实例化输出格式对象
        OutputFormat format = OutputFormat.createCompactFormat();
        //设置输出编码
        format.setEncoding("UTF-8");
        //创建需要写入的对象
        File f = new File("C:\\Users\\Administrator\\IdeaProjects\\day24\\src\\Text.XML");
        //生成XMLwriter对象,构造函数中的参数为需要输出的文件流和格式
        XMLWriter xmlWriter = new XMLWriter(new FileOutputStream(f), format);//
        //开始写入,write方法包含上面创建的DOC对象
        xmlWriter.write(doc);


    }

 

注:无法通过属性值来返回标签。
   可以找到属性或者文本进行删除,但同时也无法使用属性或者文本来删除对应的标签
   可以通过集合遍历来判断,通过对属性值的判断是否相等来删除对应的属性或者标签。 

 public static void del() throws DocumentException, IOException {
        // /*删除华为的标签功能*/
        SAXReader saxReader = new SAXReader();//建立编译器
        //将对应文件的XML文件读取到一个doc文档中
        Document doc = saxReader.read("C:\\Users\\Administrator\\IdeaProjects\\day24\\src\\HW4\\Test.XML");
        //找到想删除的子标签
        Element rootElement = doc.getRootElement();

        List<Element> brand = rootElement.elements();//将Brand对应的子标签作为一个集合
        Element name = brand.get(0);//找到华为对应的集合
        System.out.println(name);

        //使用其父级标签的方法删除该属性或者子标签
        rootElement.remove(name);//删除对应的集合。
        //输出流
        OutputFormat outputFormat = OutputFormat.createCompactFormat();
        outputFormat.setEncoding("UTF-8");
        //建立XML输出器
        XMLWriter xmlWriter = new XMLWriter(new FileOutputStream("C:\\Users\\Administrator\\IdeaProjects\\day24\\src\\HW4\\Test2.XML"), outputFormat);
        xmlWriter.write(doc);
        xmlWriter.close();
    }

如果需要源码可以发送邮件到sdiwen1982@sohu.com索取 /*************************************** 功能:读取xml文件 参数:[in] xml文件路径 返回:true读取成功 false读取失败 **************************************/ bool ReadXml(CString sXmlPath /*xml文件路径*/); /*************************************** 功能:写入xml文件 参数:[in] xml文件路径 返回:true写入成功 false写入失败 **************************************/ bool WriteXml(CString sXmlPath /*xml文件路径*/); /*************************************** 功能:释放空间 参数:无 返回:无 **************************************/ void Release(); /*************************************** 功能:删除指定的节点 参数:无 返回:true删除成功 false删除失败 **************************************/ bool DeleteNode(); /*************************************** 功能:删除当前节点的所有节点,当前节点不删除 参数:无 返回:true删除成功 false删除失败 **************************************/ bool DeleteAllSon(); /*************************************** 功能:根据索引删除节点 参数:无 返回:true删除成功 false删除失败 **************************************/ bool DeleteSonByIndex(unsigned int nIndex); /*************************************** 功能:删除节点所有属性 参数:无 返回:true删除成功 false删除失败 **************************************/ bool DeleteAllAttr(); /*************************************** 功能:根据属性删除属性 参数:无 返回:true删除成功 false删除失败 **************************************/ bool DeleteAttrByName(CString sName); /*************************************** 功能:根据索引删除属性 参数:无 返回:true删除成功 false删除失败 **************************************/ bool DeleteAttrByIndex(unsigned int nIndex); /*************************************** 功能:根据属性名设置属性值 参数:[in] sName 属性名 [in] sValue 属性值 返回:true设置成功 false设置失败 **************************************/ bool SetAttrValueByName(CString sName, CString sValue); /*************************************** 功能:插入属性 参数:[in] sName 属性名 [in] sValue 属性值 返回:true插入成功 false插入失败 **************************************/ bool InsertAttr(CString sName, CString sValue); /*************************************** 功能:设置节点值 参数:[in] sValue 属性值 返回:true设置节点值成功 false设置节点值失败 **************************************/ bool SetNodeValue(CString sValue); /*************************************** 功能:插入节点 参数:[in] sName 节点名 返回:非空表示插入节点成功,返回插入的新节点指针 空表示插入失败 **************************************/ CXMLNode * InsertNode(CString sName); /*************************************** 功能:判断是否存在节点 参数:[in] pNode 节点文件指针, 返回:false没有节点 true有节点 **************************************/ bool HasChild(MSXML2::IXMLDOMNodePtr pNode);
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值