从给定节点提取子节点数据

我想使用DOM4j在Java中解析xml文件。

我以此XML为例:

  
Content-Type=application/xml
booking created!

给定请求(第一个节点)节点,如何提取子节点数据?

例如,获取状态代码或名称属性?

假设您将“请求”节点作为Element那么您可以执行以下操作:

 Element response = (Element) request.elements().get(0); int statusCode = Integer.parseInt(response.attribute("statusCode")); 

如果要以递归方式遍历子节点,则必须编写迭代(或递归)代码来访问elements()方法返回的列表中的每个元素。

[编辑]您还可以使用XPath提取您正在寻找的特定项目 :

 int statusCode = Integer.parseInt( request.selectSingleNode("response/@statusCode").getText()); String firstHeaderName = request.selectSingleNode( "response/headerParameters/headerParameter/@name").getText(); 

使用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的文件中:

   129  value inside cupcake value inside montana   

2.将这些jar文件放在名为lib的目录中,与Main.java位于同一目录中:

 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中的内容。