方法getElementsByTagName未定义类型元素

时间:2014-01-18 01:13:00

标签: java xml xml-parsing

我正在尝试编写用于解析XML文件的Java代码。我想检索“function”标签内所有“name”元素的值。但是当我使用NodeList时nlList = element.getElementsByTagName(“name”);有错误“方法getElementsByTagName未定义类型元素”。

这是我的XML文件示例: 每个函数标记都包含多个“name”元素,我想使用getTextContent来访问这些节点的值。

                <function><type><specifier>private</specifier> <name>boolean</name></type> <name>canClose</name><parameter_list>(<param><decl><type><name>IEditorReference</name></type> <name>editorReference</name></decl></param>)</parameter_list> <block>{
                        <decl_stmt><decl><type><name>IEditorPart</name></type> <name>editor</name> =<init> <expr><call><name><name>editorReference</name>.<name>getEditor</name></name><argument_list>(<argument><expr><name>false</name></expr></argument>)</argument_list></call></expr></init></decl>;</decl_stmt>
                        <if>if <condition>(<expr><name>editor</name> <name>instanceof</name> <name>IContextAwareEditor</name></expr>)</condition><then> <block>{
                            <return>return <expr>((<name>IContextAwareEditor</name>) <name>editor</name>).<call><name>canClose</name><argument_list>()</argument_list></call></expr>;</return>
                        }</block></then></if>
                        <return>return <expr><name>true</name></expr>;</return>
                    }</block></function>

这是我的代码,首先我尝试检索所有“函数”元素,之后我写了一个for循环来查找“function”标签内的所有“name”元素。

但是当我第二次使用getElementsByTagName方法时,有一个错误“”方法getElementsByTagName未定义类型元素。

String name = file.getName();
File fXmlFile = new File(dirPath + name);
DocumentBuilderFactory dbFactory = DocumentBuilderFactory.newInstance();
DocumentBuilder dBuilder = dbFactory.newDocumentBuilder();
Document doc = dBuilder.parse(fXmlFile);
doc.getDocumentElement().normalize();
NodeList nList = doc.getElementsByTagName("function");
for (int temp = 0; temp < nList.getLength(); temp++) {
    NodeList nList1 = nList.item(temp).getChildNodes();
    Node n = nList1.item(temp);
    if (n.getNodeType() == Node.ELEMENT_NODE) {
        Element eElement = (Element) n;
        NodeList nlList = eElement.getElementsByTagName("name");
    }
}

1 个答案:

答案 0 :(得分:0)

当我运行此代码段时:

DocumentBuilderFactory dbFactory = DocumentBuilderFactory.newInstance();
DocumentBuilder dBuilder = dbFactory.newDocumentBuilder();
Document doc = dBuilder.parse(fXmlFile);
doc.getDocumentElement().normalize();
NodeList nList = doc.getElementsByTagName("name");
for(int i=0; i<nList.getLength(); i++){
    System.out.println(nList.item(i).getTextContent());
}

我得到了这个输出:

boolean
canClose
IEditorReference
editorReference
IEditorPart
editor

editorReference
.
getEditor

editorReference
getEditor
false
editor
instanceof
IContextAwareEditor
IContextAwareEditor
editor

我希望你试图达到同样的目的。 另外,请确保在程序中导入以下内容。 (因为你不想导入javax.swing.text.Document):

import org.w3c.dom.Document;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;