我有一个 xml 文档在 Java 中被解析为 w3c 文档。在我的 xml 中,我有许多同名的元素,例如<item ..... />
,每个元素都有唯一的属性值,例如<item name="a" .... />
。我想在java中做:
doc.getElementById("a")
为了得到那个特定的项目,我在那里有那个名字。我如何告诉java使用'name'作为id?或者,或者,我怎样才能以最简单的方式获取该特定项目?
我有一个 xml 文档在 Java 中被解析为 w3c 文档。在我的 xml 中,我有许多同名的元素,例如<item ..... />
,每个元素都有唯一的属性值,例如<item name="a" .... />
。我想在java中做:
doc.getElementById("a")
为了得到那个特定的项目,我在那里有那个名字。我如何告诉java使用'name'作为id?或者,或者,我怎样才能以最简单的方式获取该特定项目?
DOM 不是轻松查询文档和取回找到的元素的最佳 API。学习 XPath,这是一个更合适的 API,或者自己遍历元素树。
getElementById()
只会返回具有给定id
属性的元素(编辑:在文档 DTD 或模式中标记为这样)。它无法通过name
属性找到。
您需要编写一个 DTD,将您的属性定义为 type ID
。
好吧,要做出完整的答案,我必须像每个人所说的那样使用 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")
为了进行doc.getElementById("a")
工作,您需要将 XML 更改为<item id="a" name="a" .... />
如果您无法更改 XML,则可以使用 XPath 来检索此元素。