首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >解析包含嵌套标记的xml

解析包含嵌套标记的xml
EN

Stack Overflow用户
提问于 2011-12-10 04:10:30
回答 2查看 1.1K关注 0票数 1

xml:

代码语言:javascript
复制
<Node name="1">
   <Node name="2">
       <Node name="4"></Node>
   </Node>
   <Node name = "3">
       <Node name="5"></Node>
    </Node>
</Node>

我想在java中创建以下对象

代码语言:javascript
复制
Node{
 String name;
 List<Node> nodeList
}

有没有能做到这一点的xml解析库?我尝试过xstream和simple,但还没能弄明白。

任何帮助都将不胜感激。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-12-10 04:25:12

这段代码使用XStream并生成您要查找的输出。

节点类:

代码语言:javascript
复制
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);
    }
}

主类:

代码语言:javascript
复制
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的一部分。

票数 1
EN

Stack Overflow用户

发布于 2011-12-14 01:54:56

代码语言:javascript
复制
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);
    }
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8451141

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档