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 回答