解析XML文件(二)

解析XML(二)

  • 继续(一)的内容,接下来依然进行XML文件的解析。

7.创建新节点,即Element;为节点添加属性和子节点;将新节点添加到原来所有节点之后和中间


代码如下:


public class Demo05 {

	public static void main(String[] args) throws Exception {
		//创建dom4j解析器对象
		SAXReader saxReader = new SAXReader();
		//创建InputStream对象,指向硬盘的xml文件
		Document xmlDocument = saxReader.read(Demo05.class.getClassLoader().getResourceAsStream("bookstore.xml"));
		//获取根节点
		Element rootElement = xmlDocument.getRootElement();
		//获取根节点下的所有直接子节点
		List<Element> list = rootElement.elements("book");
		
		//创建新book节点
		Element newBookElement = DocumentHelper.createElement("book");
		//为新book节点设置属性值
		newBookElement.addAttribute("id", "third");
		//为新book节点添加子节点及其内容
		newBookElement.addElement("title").setText("JavaEE");

		//将新book节点添加到所有book节点之后
		//list.add(newBookElement);
		//将新节点插入到任意位置,可用add(int index,Element element)
		list.add(0, newBookElement);
		
		//将document对象输出到硬盘中
		OutputFormat format = OutputFormat.createPrettyPrint();
		OutputStream os = new FileOutputStream(new File("D:\\bookstore.xml"));
		XMLWriter xmlWriter = new XMLWriter(os,format);
		xmlWriter.write(xmlDocument);
		xmlWriter.close();
	}

}

程序运行结果如下:

解析XML文件(二)

用到的API如下:

addElement(String nodeName)

setText(String text)


8.XPATH方式定位d标签


解析XML文件(二)


public static void main(String[] args) throws Exception {

	//创建dom4j解析器对象

	SAXReader saxReader = new SAXReader();

	//创建InputStream对象,指向硬盘的xml文件

	Document xmlDocument =saxReader.read(Demo06.class.getClassLoader().getResourceAsStream("test.xml"));

	Element rootElement = xmlDocument.getRootElement();

	//一层层的定位

	String name = rootElement.element("a").element("b").element("c").element("d").getText().trim();

	System.out.println(name);

}

使用上面的方法定位是不是特别麻烦呢?接下来我们以XPATH方式定位d标签,以该方式定位之前,我们还需要导入jaxen-1.1-beta-6.jar包。

XPATH语法: 解析XML文件(二) 查询节点

获取符合条件的单个节点
返回一个Node对象,如果符合条件的节点有多个,那么返回第一个获取所有符合条件的节点

selectSingleNode(String xPath)

获取所有符合条件的节点

selectNodes(String xPath)


public static void main(String[] args) throws Exception {

      //创建dom4j解析器对象

      SAXReader saxReader = new SAXReader();

      //创建InputStream对象,指向硬盘的xml文件

      Document xmlDocument = saxReader.read(Demo06.class.getClassLoader().getResourceAsStream("test.xml"));

      Element rootElement = xmlDocument.getRootElement();

      

    String xPath = "/test/a/b/c/d";

    Element element = (Element)xmlDocument.selectSingleNode(xPath);

    name = element.getText().trim();

    System.out.println(name);

}

通过上面的方式即可定位到d标签。

如果要获得其他条件的标签只需要更改XPATH字符串即可,根据要获取对象的个数,选择恰当的查询节点API。

解析XML文件(二)
若有不懂,欢迎共同讨论。