【问题标题】:Adding the root element to a xml document in java在java中将根元素添加到xml文档
【发布时间】:2013-03-16 10:30:41
【问题描述】:

我正在尝试生成一个 XML 文件并保存它。以下代码显示了我将根元素附加到文档的方式。当我这样做时,抛出异常如下。

线程“main”org.w3c.dom.DOMException 中的异常:HIERARCHY_REQUEST_ERR:试图在不允许的地方插入节点。

public void comUnitIterator() {
    System.out.println("This is the iterator");
    Document fileDeclarationDocument = documentBuilder();
    if (comUnits != null && comUnits.size() > 0) {

        for (int i=0; i<comUnits.size();i++) {
            CompilationUnit cu=comUnits.get(i);
            SourceCodeClassVisitor classVisitor = new SourceCodeClassVisitor();
            ClassOrInterfaceDeclaration classOrInterface = classVisitor.visit(cu, null);
            Element rootElement = fileDeclarationDocument.createElement("class");
            fileDeclarationDocument.appendChild(rootElement);
            //classVisitor.visit(cu, null);
        }
    }
    createXML(fileDeclarationDocument, "ABC");
}

谁能告诉我这个例外的原因。

提前谢谢你。

【问题讨论】:

  • 可以尝试使用 JDOM,DOM 在 Java 中有点冗长且有问题。 jdom.org

标签: java xml dom


【解决方案1】:

您正在为此循环的每次迭代添加一个根元素:

for (int i=0; i&lt;comUnits.size();i++)

将您的代码更改为:

Element rootElement = fileDeclarationDocument.createElement("class");
fileDeclarationDocument.appendChild(rootElement);
for (int i=0; i<comUnits.size();i++) {
     //add children here
 }

只能有一个根元素

【讨论】:

    【解决方案2】:

    您需要创建一个 single 根元素。目前,您正在为comUnits 的每个元素创建一个。你应该把这个声明:

    Element rootElement = fileDeclarationDocument.createElement("class");
    

    ...并将其附加到文档中:

    fileDeclarationDocument.appendChild(rootElement);
    

    然后在您的循环中,您可以为每次迭代创建一个新元素,并将 that 附加到根元素。 (说实话,您还不清楚您希望您的 XML 结构是什么。有了更多详细信息,我们或许可以为您提供更多帮助。)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-10-05
      • 1970-01-01
      • 2015-10-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多