解析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();
}
}
程序运行结果如下:
用到的API如下:
addElement(String nodeName)
setText(String text)
8.XPATH方式定位d标签
代
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语法: 查询节点
获取符合条件的单个节点
返回一个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。
若有不懂,欢迎共同讨论。