Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 解析包含嵌套标记的xml_Java_Xml - Fatal编程技术网

Java 解析包含嵌套标记的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> 节点{ 字符串名; 列表节点列表 } 是

xml:


我想用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也可以。。。