0

XML ファイルを使用してドロップ ダウン リストを作成したいと考えています。私はすでにXMLファイルを作成しており、最初にxmlファイルを読み取り、xmlファイルからのアイテムを提供するために書いたコードはコンパイルされていますが、後でコードを実行したいときにエラーが発生します。

public ArrayList readXML(){

    DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
    DocumentBuilder db;

        try {
            db = dbf.newDocumentBuilder();

    Document dom;

        dom = db.parse("PVS_XML.xml");

    Element docEle = dom.getDocumentElement();

    NodeList nl = docEle.getElementsByTagName("item");
    System.out.println(((Node) nl).getNodeValue());

        } catch (Exception e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    return null;
}

エラーメッセージ:

java.lang.ClassCastException: com.sun.org.apache.xerces.internal.dom.DeepNodeListImpl cannot be cast to org.w3c.dom.Node
at de.sidion.pvsng.pages.InputPage.readXML(InputPage.java:222)
at de.sidion.pvsng.pages.InputPage.init(InputPage.java:255)
at de.sidion.pvsng.pages.InputPage.<init>(InputPage.java:183)
at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:57)
at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
4

1 に答える 1

3

ノード リストをノードにキャストすることはできません。それが必要な場合は、リストの最初の要素を取得します

NodeList nl = docEle.getElementsByTagName("item");
...
((Node) nl).getNodeValue() <-- this

本当にそれが必要な場合は、リストを調べるか、リストの要素を取得してください。

for(Node n : nl)
    System.out.println(n.getNodeValue());

編集

私の間違い、それは反復可能ではありません。サイズでやってみてください:

for(int i=0; i < nl.getLength(); i++)
{
   Node childNode = nl.item(i);
   System.out.println(childnode.getNodeValue());
}

ただし、取得しているのは要素であり、要素には値がなく、値を持つテキストノードがあるため、これはまだやりたいことではないと思います。つまり、子ノード (テキスト ノード) が必要です。したがって、おそらく次のようなものが必要です

for(int i=0; i<nodeList.getLength(); i++)
{
   Element childElement = (Element)nodeList.item(i);
   NodeList innernodes = childElement.getChildNodes();

   System.out.println(innernodes.item(0).getNodeValue());
}
于 2012-07-06T11:04:24.520 に答える