java xml的读取与写入(dom)

首先,先获取到文档对象

private static Document getDocument(String path) {
	//1.创建DocumentBuilderFactory对象
	DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
	//文档构建对象
	DocumentBuilder builder = null;
	try {
		//从工厂对象中获得文档构建对象
		builder = factory.newDocumentBuilder();
		//用文档构建对象创建文档  参数为xml文件地址
		Document d = builder.parse(path);
		//简写
		Document d = DocumentBuilderFactory.newInstance().newDocumentBuilder().parse(path);
		return d;
	} catch (ParserConfigurationException e) {
		e.printStackTrace();
	} catch (SAXException e) {
		e.printStackTrace();
	} catch (IOException e) {
		e.printStackTrace();
	}
	return null;
}

然后拿到了一个文档树
遍历这个文档树主要用到这些方法

  • getElementsByTagName(string tagname) //返回NodeList 根据元素名查找,没找到也会返回一个长度为0的空列表
  • getChildNodes() // 返回NodeList 返回当前元素的所有直接子元素
  • getElementById() //返回Element 返回具有指定id的元素
    因为xml标签名称都是自定的所以一般使用getElementsByTagName()就够用了
//使用getElementsByTagName获取xml元素
NodeList list= d.getElementsByTagName("Brand");
//循环读取
for (int i = 0; i < list.getLength(); i++) {
    //接收列表中的项目并转换为元素  由于NodeList的item返回Node 而Element是Node的子接口,所以可以直接转换
    Element element = (Element) list.item(i);
    //对获取到的元素进行各种操作
    //获取name属性
    String name = element.getAttribute("name");
    //删除自身
    element .getParentNode().removeChild(brand.item(i));
    //设置属性
    element.setAttribute("id", i + "");
}

同理,多级只需要多重循环即可

//使用getElementsByTagName获取xml元素
NodeList list= d.getElementsByTagName("Brand");
//循环读取
for (int i = 0; i < list.getLength(); i++) {
    //接收列表中的项目并转换为元素
    Element element = (Element) list.item(i);
    ...
    //第二层
    NodeList list2= d.getElementsByTagName("Brand");
    for (int i = 0; i < list2.getLength(); i++) {
        Element element2 = (Element) list.item(i);
        ...
    }
}

写入待明天更新....

posted @ 2019-11-20 23:44  天字第一号  阅读(342)  评论(0编辑  收藏  举报