[英]parsing xml containing nested tags
xml:
<Node name="1">
<Node name="2">
<Node name="4"></Node>
</Node>
<Node name = "3">
<Node name="5"></Node>
</Node>
</Node>
我想在Java中创建以下对象
Node{
String name;
List<Node> nodeList
}
是否有任何XML解析库可以做到这一点。 我已经尝试过xstream和简单的方法,但无法弄清楚。
任何帮助,将不胜感激。
此代码使用XStream并生成您要查找的输出。
节点类:
import java.util.ArrayList;
import java.util.List;
import com.thoughtworks.xstream.annotations.XStreamAlias;
import com.thoughtworks.xstream.annotations.XStreamAsAttribute;
import com.thoughtworks.xstream.annotations.XStreamImplicit;
@XStreamAlias("Node")
public class Node {
@XStreamAsAttribute
private String name;
@XStreamImplicit
private List<Node> nodes = new ArrayList<Node>();
public Node(String name) {
this.name = name;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public List<Node> getNodes() {
return nodes;
}
public void setNodes(List<Node> nodes) {
this.nodes = nodes;
}
public void addNode(Node n) {
nodes.add(n);
}
}
主类:
import com.thoughtworks.xstream.XStream;
public class NodeXStream {
public static void main(String[] args) {
Node n1 = new Node("1");
Node n2 = new Node("2");
Node n3 = new Node("3");
Node n4 = new Node("4");
Node n5 = new Node("5");
n1.addNode(n2);
n1.addNode(n3);
n2.addNode(n4);
n3.addNode(n5);
XStream xs = new XStream();
xs.processAnnotations(Node.class);
// To XML
String myXML = xs.toXML(n1);
// From XML
Node newNode = (Node) xs.fromXML(myXML);
}
}
编辑:添加了反序列化代码。
要反序列化,您还需要将XPP3库添加到构建路径。 它是XStream的一部分。
public class DigestNodes {
List<Node> nodes;
public DigestNodes() {
nodes= new ArrayList<Node>();
}
public static void main(String[] args) {
DigestNodes digestStudents = new DigestNodes();
digestStudents.digest();
}
private void digest() {
try {
Digester digester = new Digester();
digester.push(this);
digester.addObjectCreate("*/node", Node.class );
digester.addSetProperties( "*/node");
digester.addSetNext( "*/node", "addNode" );
DigestNodes ds = (DigestNodes) digester.parse(this.getClass()
.getClassLoader()
.getResourceAsStream("node.xml"));
} catch (Exception ex) {
ex.printStackTrace();
}
}
public void addNode( Node node ) {
nodes.add(node);
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.