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();
}