1

stockA.txtという形式の株価ファイルを含むフォルダーがあります。xmlファイルに拡張子のないファイル名をノードとして格納するJavaプログラムを作成しようとしています。たとえば、file.xmlは次の形式である必要があります。

<stockA></stockA>
<stockB></stockB>

問題は、次のエラーコードが表示されることです。スレッド "main"の例外org.w3c.dom.DOMException:HIERARCHY_REQUEST_ERR:許可されていない場所にノードを挿入しようとしました。

これがコードです

    /*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package xmlfilecreation;

import java.io.File;
import java.util.ArrayList;
import java.util.List;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.ParserConfigurationException;
import javax.xml.transform.Transformer;
import javax.xml.transform.TransformerException;
import javax.xml.transform.TransformerFactory;
import javax.xml.transform.dom.DOMSource;
import javax.xml.transform.stream.StreamResult;
import org.w3c.dom.Document;
import org.w3c.dom.Element;

/**
 *
 * @author Administrator
 */
public class XMLFileCreation {



    /**
     * @param args the command line arguments
     */
    public static void main(String[] args) {
        // TODO code application logic here
        File folder = new File("/Users/Administrator/Documents/TM470/NYSE_EOD/NyseLast2Years/");
        File[] listOfFiles = folder.listFiles();

        List<String> results = new ArrayList<String>();
        for (int i = 0; i < listOfFiles.length; i++)
        {
            results.add(listOfFiles[i].getName().replace(".txt", ""));
            //System.out.println(results.get(i));
        }

        try
        {
            DocumentBuilderFactory docFactory = DocumentBuilderFactory.newInstance();
            DocumentBuilder docBuilder = docFactory.newDocumentBuilder();

            //elements
            Document doc = docBuilder.newDocument();

            //root element
            Element rootElement = doc.createElement("Stocks");
            doc.appendChild(rootElement);

            int counter = 0;

            Element myElement;
            for (String item: results)
            {
                myElement = doc.createElement(item);
                doc.appendChild(myElement);
                rootElement.appendChild(myElement);
                counter++;
            }

            System.out.println(counter);

            //write the content into xml file
            TransformerFactory transformerFactory = TransformerFactory.newInstance();
            Transformer transformer = transformerFactory.newTransformer();
            DOMSource source = new DOMSource(doc);
            StreamResult result = new StreamResult(new File("file.xml"));

            transformer.transform(source, result);

            System.out.println("File saved!");
        }
        catch (ParserConfigurationException ex)
        {
            ex.printStackTrace();
        }
        catch(TransformerException ex)
        {
            ex.printStackTrace();
        }
    }
}

どうすればそのエラーを修正できますか?ありがとうございました。

4

1 に答える 1

2

2つの要素を追加します。1つはルートレベルで、もう1つはStocksタグに追加します。あなたはそれを一度だけする必要があります。

for (String item: results) {
    Element myElement = doc.createElement(item);
    // doc.appendChild(myElement); -> You don't need this one
    rootElement.appendChild(myElement);
    counter++;
}

ルート要素に追加するだけで十分です。

于 2012-09-07T17:42:50.537 に答える