Java 从给定节点提取子节点数据
我想用DOM4j解析Java中的xml文件 我以以下XML为例:Java 从给定节点提取子节点数据,java,xml-parsing,dom4j,Java,Xml Parsing,Dom4j,我想用DOM4j解析Java中的xml文件 我以以下XML为例: <request method="POST" url="/devices/test/planner" body="*"> <response statusCode="200"> <header> <headerParameters> <headerParameter name="Content-Type"> Co
<request method="POST" url="/devices/test/planner" body="*">
<response statusCode="200">
<header>
<headerParameters>
<headerParameter name="Content-Type">
Content-Type=application/xml
</headerParameter>
</headerParameters>
</header>
<body>booking created!</body>
</response>
</request>
内容类型=应用程序/xml
预订创建!
给定请求(第一个节点)节点,如何提取子节点数据
例如,获取
状态代码或
名称属性 假设您将“请求”节点作为
Element response=(Element)request.elements().get(0);
int statusCode=Integer.parseInt(response.attribute(“statusCode”);
如果希望递归地遍历子元素,那么必须编写迭代(或递归)代码来访问该方法返回的列表中的每个元素
[编辑]您还可以查找:
int statusCode=Integer.parseInt(
request.selectSingleNode(“response/@statusCode”).getText();
弦首名=
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");
}
}
<?xml version="1.0" encoding="utf-8"?>
<penguins>
<mars>129</mars>
<PieHole>
<cupcake>value inside cupcake</cupcake>
<montana>value inside montana</montana>
</PieHole>
</penguins>
dom4j-1.6.1.jar
jaxen-1.1.1.jar
javac -cp .:./lib/* Main.java
java -cp .:./lib/* Main
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
2。将其放入名为/tmp/myxml.xml的文件中:
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");
}
}
<?xml version="1.0" encoding="utf-8"?>
<penguins>
<mars>129</mars>
<PieHole>
<cupcake>value inside cupcake</cupcake>
<montana>value inside montana</montana>
</PieHole>
</penguins>
dom4j-1.6.1.jar
jaxen-1.1.1.jar
javac -cp .:./lib/* Main.java
java -cp .:./lib/* Main
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
3。编译程序并从终端运行:
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");
}
}
<?xml version="1.0" encoding="utf-8"?>
<penguins>
<mars>129</mars>
<PieHole>
<cupcake>value inside cupcake</cupcake>
<montana>value inside montana</montana>
</PieHole>
</penguins>
dom4j-1.6.1.jar
jaxen-1.1.1.jar
javac -cp .:./lib/* Main.java
java -cp .:./lib/* Main
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
4。解释输出:
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");
}
}
<?xml version="1.0" encoding="utf-8"?>
<penguins>
<mars>129</mars>
<PieHole>
<cupcake>value inside cupcake</cupcake>
<montana>value inside montana</montana>
</PieHole>
</penguins>
dom4j-1.6.1.jar
jaxen-1.1.1.jar
javac -cp .:./lib/* Main.java
java -cp .:./lib/* Main
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将其解析为文档类型。它使用selectNodes(string)方法获取PieholeXML标记。对于每一个PieholeXML标记,它都会抓取cupcake和montana标记并将它们放入Foo类中。最后,它会打印出Foo里面的内容