Java 解析包含嵌套标记的xml
xml:Java 解析包含嵌套标记的xml,java,xml,Java,Xml,xml: 我想用java创建以下对象 <Node name="1"> <Node name="2"> <Node name="4"></Node> </Node> <Node name = "3"> <Node name="5"></Node> </Node> </Node> 节点{ 字符串名; 列表节点列表 } 是
我想用java创建以下对象
<Node name="1">
<Node name="2">
<Node name="4"></Node>
</Node>
<Node name = "3">
<Node name="5"></Node>
</Node>
</Node>
节点{
字符串名;
列表节点列表
}
是否有任何xml解析库可以做到这一点。
我试过xstream和simple,但一直没能找到答案
任何帮助都将不胜感激。此代码使用XStream并生成您要查找的输出 节点类:
Node{
String name;
List<Node> nodeList
}
编辑:
添加了反序列化代码
要反序列化,还需要将XPP3库添加到构建路径。它是XStream的一部分。此代码使用XStream并生成您要查找的输出
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);
}
}
节点类:
Node{
String name;
List<Node> nodeList
}
编辑:
添加了反序列化代码
要反序列化,还需要将XPP3库添加到构建路径。它是XStream的一部分。公共类节点{
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);
}
}
列出节点;
公共节点(){
节点=新的ArrayList();
}
公共静态void main(字符串[]args){
DigestNodes digestStudents=新的DigestNodes();
digest学生;
}
个人资料摘要({
试一试{
蒸煮器蒸煮器=新蒸煮器();
消化器。推(这个);
digester.addObjectCreate(“*/node”,node.class);
digester.addSetProperties(“*/node”);
digester.addSetNext(“*/node”,“addNode”);
DigestNodes ds=(DigestNodes)digester.parse(this.getClass())
.getClassLoader()
.getResourceAsStream(“node.xml”);
}捕获(例外情况除外){
例如printStackTrace();
}
}
公共void addNode(节点){
nodes.add(node);
}
}
公共类节点{
列出节点;
公共节点(){
节点=新的ArrayList();
}
公共静态void main(字符串[]args){
DigestNodes digestStudents=新的DigestNodes();
digest学生;
}
个人资料摘要({
试一试{
蒸煮器蒸煮器=新蒸煮器();
消化器。推(这个);
digester.addObjectCreate(“*/node”,node.class);
digester.addSetProperties(“*/node”);
digester.addSetNext(“*/node”,“addNode”);
DigestNodes ds=(DigestNodes)digester.parse(this.getClass())
.getClassLoader()
.getResourceAsStream(“node.xml”);
}捕获(例外情况除外){
例如printStackTrace();
}
}
公共void addNode(节点){
nodes.add(node);
}
}
我已经好几年没有使用jaxb了,但是它在这里可以工作吗?我已经好几年没有使用jaxb了,但是它在这里可以工作吗?我正在尝试反序列化,所以它应该是xs.fromXml()…但是我遇到了一些其他异常,我正在尝试解决这些异常…谢谢!!此代码也适用于反序列化。只要使用fromXML,它就会返回您的对象。我将向答案中添加反序列化代码。这是我在线程“main”java.lang.ArrayIndexOutOfBoundsException中得到的异常:-1位于com.thoughtworks.xstream.core.util.FastStack.pop(FastStack.java:42)位于com.thoughtworks.xstream.io.xml.AbstractPullReader.move(AbstractPullReader.java:125)在com.thoughtworks.xstream.io.xml.AbstractPullReader.moveDown(AbstractPullReader.java:103)在com.thoughtworks.xstream.io.xml.XppReader.(XppReader.java:63)-----------------------------------------试图找出问题OK…因此在读取xml时出现了一些问题。。。。您的解决方案是有效的…只是对我来说,它不是从xml文件读取的…但这应该相对容易修复。。。谢谢顺便问一下,你知道如何使用apache digester做同样的事情吗??我想如果xstream支持它,digeser也可以…我正在尝试反序列化,所以它应该是xs.fromXml()…但是我遇到了一些其他异常,我正在尝试解决这些异常…谢谢!!此代码也适用于反序列化。只要使用fromXML,它就会返回您的对象。我将向答案中添加反序列化代码。这是我在线程“main”java.lang.ArrayIndexOutOfBoundsException中得到的异常:-1位于com.thoughtworks.xstream.core.util.FastStack.pop(FastStack.java:42)位于com.thoughtworks.xstream.io.xml.AbstractPullReader.move(AbstractPullReader.java:125)在com.thoughtworks.xstream.io.xml.AbstractPullReader.moveDown(AbstractPullReader.java:103)在com.thoughtworks.xstream.io.xml.XppReader.(XppReader.java:63)-----------------------------------------试图找出问题OK…因此在读取xml时出现了一些问题。。。。您的解决方案是有效的…只是对我来说,它不是从xml文件读取的…但这应该相对容易修复。。。谢谢顺便问一下,你知道如何使用apache digester做同样的事情吗??我想如果xstream支持它,digeser也可以。。。