JDOM.Element.getChild (String) возвращает неожиданные результаты - PullRequest
1 голос
/ 20 декабря 2010

Согласно API на jdom.org , семантика getChild(String name):

Возвращает первый дочерний элемент в этом элементе с указанным локальным именем и принадлежностью.без пространства имен.Если для указанного имени и пространства имен нет элементов, возвращается нуль.

Поэтому, если у меня есть структура 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?
}

Ответы [ 3 ]

3 голосов
/ 21 декабря 2010

Чтобы получить нужную функциональность, я использовал Iterator из функции getDescendants(ElementFilter) из jdom.org

Затем я получил Element, который искал, используя код, подобный следующему:

Element lvl3 = lvl1.getDescendants(new ElementFilter("lvl3"));
1 голос
/ 20 декабря 2010

Вы только что сказали это ...

Возвращает первый дочерний элемент. в этом элементе с заданным местное название ...

По сути, на lvl1 ваш первый ребенок - lvl2. Я не использовал JDOM, чтобы помочь дальше. Я предлагаю перейти к lvl2 и получить lvl3.

0 голосов
/ 20 декабря 2010

--- lvl1

---lvl2(child of lvl1)

  ---lvl3(child of lvl2)
...