【问题标题】:method getElementsByTagName is undefined for type element类型元素的方法 getElementsByTagName 未定义
【发布时间】:2014-02-07 13:07:31
【问题描述】:

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

这是我的 XML 文件示例: 每个函数标签都包含多个“名称”元素,我想使用 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 循环来查找“函数”标签内的所有“名称”元素。

但是当我第二次使用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");
    }
}

【问题讨论】:

  • 它在哪一行显示错误,在您向我们展示的内容中是哪一行?如果它真的是在说“类型元素”——小写——那么你正在使用一个名为 element 的类,它与 Element 不同并且不支持该方法。

标签: java xml xml-parsing


【解决方案1】:

当我运行这个 sn-p 时:

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;

【讨论】:

  • 感谢您的回答,但我不想要所有名称元素。我只想要那些在函数标签内的人。我的 XML 文件中有不同的标签,我在这里只复制了函数标签。所以我不想要在不同标签内的名称元素,我只想要那些在函数标签内的元素.
  • 你能弄明白吗?
【解决方案2】:

遇到了这个错误,原来我导入了错误的元素库,因此找不到该函数的实现。确保您正在导入正确的库。

import org.w3c.dom.Element;

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-10-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-12-23
    • 2016-06-07
    • 2021-06-19
    • 2014-07-14
    相关资源
    最近更新 更多