使用 dom4j 从给定节点中提取子节点数据:
1. 将此 java 代码放入名为 Main.java 的文件中:
import java.util.*;
import java.io.*;
import org.dom4j.*;
import org.dom4j.io.*;
class Foo{
String moo;
String baz;
}
class Main{
public static Document parse(String filePath) throws DocumentException {
SAXReader reader = new SAXReader();
Document document = reader.read(filePath);
return document;
}
public static void main(String[] args){
try{
File f = new File("/tmp/myxml.xml");
Document document = parse(f.toString());
List list = document.selectNodes("//penguins/PieHole");
Foo foo = new Foo();
Iterator iter=list.iterator();
while(iter.hasNext()){
Element element=(Element)iter.next();
foo.moo = element.selectSingleNode("cupcake").getText();
foo.baz = element.selectSingleNode("montana").getText();
}
System.out.println("foo.moo: " + foo.moo);
System.out.println("foo.baz: " + foo.baz);
}
catch(Exception e){
e.printStackTrace();
}
System.out.println("done");
}
}
2. 将其放入名为 /tmp/myxml.xml 的文件中:
<?xml version="1.0" encoding="utf-8"?>
<penguins>
<mars>129</mars>
<PieHole>
<cupcake>value inside cupcake</cupcake>
<montana>value inside montana</montana>
</PieHole>
</penguins>
2. 将这些jar文件放在与Main.java相同目录下名为lib的目录中:
dom4j-1.6.1.jar
jaxen-1.1.1.jar
3. 编译程序并从终端运行:
javac -cp .:./lib/* Main.java
java -cp .:./lib/* Main
4. 解释输出:
eric@defiant ~/code/java/run04 $ javac -cp .:./lib/* Main.java
eric@defiant ~/code/java/run04 $ java -cp .:./lib/* Main
foo.moo: value inside cupcake
foo.baz: value inside montana
done
5. 刚刚发生了什么?
这使用 Java 版本 1.7.0 并导入 dom4j 版本 1.6.1 库以及 jaxen 1.1.1 支持库。它导入用户创建的 xml 文档。然后它使用 SAXReader 将其解析为 Document 类型。它使用 selectNodes(string) 方法来获取 PieHole xml 标记。对于每一个 PieHole xml 标签,它将抓取纸杯蛋糕和蒙大拿标签并将它们放入 Foo 类中。最后,它打印出 Foo 内部的内容。