4

XML ファイルを生成して保存しようとしています。次のコードは、ルート要素をドキュメントに追加する方法を示しています。これを行うと、次のように例外がスローされました。

スレッド「メイン」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");
}

誰かがこの例外の理由を教えてください。

前もって感謝します。

4

2 に答える 2

2

このループの反復ごとにルート要素を追加しています。

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

コードを次のように変更します。

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

ルート要素は 1 つしか存在できません

于 2013-03-26T15:02:02.450 に答える
1

単一のルート要素を作成する必要があります。現在、 の要素ごとに 1 つ作成していますcomUnits。このステートメントをプルする必要があります。

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

...そしてそれをドキュメントに追加します:

fileDeclarationDocument.appendChild(rootElement);

次に、ループ内で、反復ごとに新しい要素を作成し、それをルート要素に追加できます。(正直に言うと、XML 構造をどのようにしたいかは明確ではありません。それについての詳細があれば、さらにお役に立てるかもしれません。)

于 2013-03-26T15:00:37.920 に答える