使用dom4j递归构建XML树,而没有根节点的重复代码

时间:2014-03-10 18:26:55

标签: java xml dom4j

我正在将树结构序列化为XML数据。 我的树看起来像

Company
  Department
    Employee
    Employee

我想要的根节点是Company,因此XML看起来像

<?xml version="1.0" encoding="UTF-8"?>
<Company>
  <Department>
    <Employee>
       ...
    </Employee>
  </Department>
</Company>

看完这些例子后,我决定把它写成这样的

public void writeNodes(Element root, NodeBase node) throws XMLStreamException
{
    Element elmt = root.addElement(node.getName());
    for (NodeBase child : node.getChildren())
    {
        writeNodes(child);
    }
}

public void makeXML(NodeCompany root, String filename)
{
    try {
        document = DocumentHelper.createDocument();            
        writeNodes(???, root);
        writeFile(document, filename);
    }
    catch (Exception e)
    {
        e.printStackTrace();
    }
}

我希望将我的根节点用作根节点,但我不想编写重复的代码来将根节点与其子节点分开处理。

由于我的树中只有一个公司节点,我可以在我的writeNodes方法中执行显式检查以跳过任何公司节点,但这看起来不太好。

有没有办法在不复制任何代码的情况下完成此代码?

1 个答案:

答案 0 :(得分:0)

HY,

对我来说,方法writeNodes是不必要的,你可以这样做:

public void makeXML(Element rootElement, String filename) {
    try {

        //you must detach it for you can add it in the new document after
        Element rootElementCopied = (Element) rootElement.clone();

        Document document = DocumentHelper.createDocument();


        document.add(rootElementCopied);

        writeFile(document, filename);
    }
    catch (Exception e){
        e.printStackTrace();
    }
}