1

根据jdom.org的 API ,语义getChild(String name)

这将返回此元素中具有给定本地名称且不属于任何命名空间的第一个子元素。如果指定名称和命名空间不存在任何元素,则返回 null。

因此,如果我有一个 XML 结构,例如:

<?xml version="1.0" encoding="UTF-8"?>
<lvl1>
    <lvl2>
        <lvl3/>
    </lvl2>
</lvl1>

我有一个 JDOM 元素,它当前指向<lvl1>. 我应该能够拨打以下电话:

Element lvl3 = lvl1Element.getChild("lvl3");

并且lvl3应该具有非空值。

但是,我发现lvl3实际上是这样null。我错过了什么吗?

这是一个应该可以工作的示例代码片段:

import java.io.StringReader;
import org.jdom.*;
public static void main(String[] args){
    Document doc = new SAXBuilder().build(new StringReader("path to file"));
    Element lvl1Element = doc.getRootElement();
    Element lvl3Element = lvl1Element.getChild("lvl3"); //is null. Why?
}
4

3 回答 3

3

为了获得我正在寻找的功能,我使用了来自jdom.orgIteratorgetDescendants(ElementFilter)函数

Element然后我通过使用类似于以下的代码得到了我正在寻找的内容:

Element lvl3 = lvl1.getDescendants(new ElementFilter("lvl3"));
于 2010-12-20T21:23:23.923 回答
2

你刚才说的......

这将返回此元素中具有给定本地名称的第一个子元素...

基本上,在 上lvl1,您的第一个孩子是lvl2。我没有使用 JDOM 来提供进一步的帮助。我的建议是去lvl2检索lvl3

于 2010-12-20T20:33:00.417 回答
0

---lvl1

---lvl2(child of lvl1)

  ---lvl3(child of lvl2)
于 2010-12-20T20:36:32.553 回答