JDOM.Element.getChild(String)返回意外结果

时间:2010-12-20 20:20:20

标签: java jdom

根据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应该为非null。

然而,我发现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?
}

3 个答案:

答案 0 :(得分:3)

为了获得我想要的功能,我使用了来自jdom.orgIterator函数的getDescendants(ElementFilter)

然后我通过使用类似于以下内容的代码获得了Element

Element lvl3 = lvl1.getDescendants(new ElementFilter("lvl3"));

答案 1 :(得分:1)

你刚刚说过......

  

这将返回第一个子元素   在给定的这个元素内   当地名称......

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

答案 2 :(得分:0)

  

--- LVL1

---lvl2(child of lvl1)

  ---lvl3(child of lvl2)