3

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

doc.getElementById("a")

为了得到那个特定的项目,我在那里有那个名字。我如何告诉java使用'name'作为id?或者,或者,我怎样才能以最简单的方式获取该特定项目?

4

4 回答 4

3

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

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

请参阅Java XML DOM:id 属性有何特别之处?详情。

于 2013-11-12T12:31:08.080 回答
1

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

于 2013-11-12T12:51:03.900 回答
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")

于 2013-11-13T08:45:12.377 回答
0

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

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

于 2013-11-12T12:28:13.973 回答