【问题标题】:Why does getElementById is not working for me? In Java为什么 getElementById 对我不起作用?在 Java 中
【发布时间】:2020-11-10 12:19:52
【问题描述】:

我正在尝试使用 Document 对象 (org.w3c.dom.Document) 在 Java 中通过 id 获取元素,但是当我使用函数 getElementById(elementId) 时返回 null。 Document 对象正在创建 Ok,因为我使用 getElementByTags 并且工作正常。

我的 Java 代码:

DocumentBuilder dbRespuesta0 = DocumentBuilderFactory.newInstance().newDocumentBuilder();
Document docRespuesta0 = dbRespuesta0.parse(new InputSource(new StringReader(context.getProperty("XML").toString())));
Element e = (Element) docRespuesta0.getElementById("ID_X");

我的 XML 的结构

<RESULT>
    <TAG1 ID="A">
        
    </TAG1>
    <TAG1 ID="B">
       
    </TAG1>
    <TAG2 DIM="30" ID="C" SIZE="2">
        
    </TAG2>
    <TAG2 DIM="300" ID="ID_X" SIZE="2">
        <TAG3 NUM="1">
            
        </TAG3>
        <TAG3 NUM="2">
           
        </TAG3>
    </TAG2>
</RESULT>

当我打印元素 e 时,我看到一个空值。我希望能在元素 e 中得到下一个 XML:

<TAG2 DIM="300" ID="ID_X" SIZE="2">
    <TAG3 NUM="1">

    </TAG3>
    <TAG3 NUM="2">

    </TAG3>
</TAG2>

【问题讨论】:

  • getElemenyById 正在查找类型 ID 而非值“ID”的属性。

标签: java xml dom


【解决方案1】:

您需要调用setSchema(schema) 来定义一个dom-schema,向模型解释ID 属性实际上是节点的ID。

来自org.w3c.dom.Document (https://docs.oracle.com/javase/7/docs/api/org/w3c/dom/Document.html#getElementById(java.lang.String))的javadoc

元素 getElementById(String elementId)

返回具有给定值的 ID 属性的元素。如果 不存在这样的元素,这将返回 null 。如果一个以上元素 具有具有该值的 ID 属性,返回的是未定义的。 DOM 实现应该使用属性 Attr.isId 来 确定属性是否属于 ID 类型。

注意:名称为“ID”或“id”的属性不是 ID 类型,除非 如此定义。

注意最后两行(突出显示)!

属性必须明确定义为 ID,而不仅仅是命名为“ID”。

这个问题/答案给出了详细的解释,应该可以帮助你: Java XML DOM: how are id Attributes special?

【讨论】:

    猜你喜欢
    • 2011-11-14
    • 2015-02-19
    • 1970-01-01
    • 2010-10-08
    • 2016-02-27
    • 2019-01-13
    • 2015-09-07
    • 1970-01-01
    • 2023-04-03
    相关资源
    最近更新 更多