Xml id属性与Java的getElementById一起使用?

时间:2013-11-12 12:24:29

标签: java xml dom xml-parsing

我有一个用Java解析的xml文档作为w3c文档。 在我的xml中,我有许多相同名称的元素,例如<item ..... />,每个元素都具有唯一属性的值,例如<item name="a" .... />。 我想在java中做:

doc.getElementById("a")

为了获得具有该名称的特定项目。 我怎么能告诉java使用'name'作为id? 或者,或者,如何以最低的复杂度获取特定项目?

4 个答案:

答案 0 :(得分:3)

DOM不是最好的API,可以轻松查询您的文档并找回找到的元素。学习XPath,这是一个更合适的API,或者自己遍历元素树。

getElementById()只返回具有给定id属性的元素(编辑:在文档DTD或模式中标记为)。它无法通过name属性找到。

有关详细信息,请参阅Java XML DOM: how are id Attributes special?

答案 1 :(得分:1)

您需要编写一个DTD,将您的属性定义为类型ID

答案 2 :(得分:1)

嗯,要做出完整的答案,我必须像所有人所说的那样使用DTD模式。 由于我的需求非常简单,我通过以下方式将其添加到我的xml中:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE root [
    <!ATTLIST item 
        name ID #REQUIRED
        >
]>
<root> .... </root>

唯一需要知道的是,一旦你声明ATTLIST,我必须声明我的所有其余属性,因此,你需要添加IMPLIED:

some-attribute CDATA #IMPLIED

它表示some-attribute包含一些数据(也可以使用PCDATA用于解析的cdata),并暗示,这意味着它可以存在或不存在。没关系。

所以最终,它看起来像是:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE root [
    <!ATTLIST item 
        name ID #REQUIRED
        some-attribute CDATA #IMPLIED
        >
]>
<root> .... </root>

从Java方面来说,盲目地使用它,例如getElementById("some-name")

答案 3 :(得分:0)

要使doc.getElementById("a")工作,您需要将XML更改为<item id="a" name="a" .... />

如果您无法更改XML,则可以使用XPath来检索此元素。