Список элементов в JDOM

У меня есть вопрос относительно списка элементов в xml

Я пытаюсь удалить все под, а также теги.

Но когда я отлаживаю свой список параметров, я заметил, что мой список выглядит так:

text
element
text 
element
text
element
text 
element

Но мне нужны только элементы в списке, а не текст, чтобы мне было легче удалить правильный элемент. Как это сделать?

Это мой код:

public void deleteParameter(int row, int index) {

        int objTypeIndex = index + 1;

        File xml = new File(XMLEditorService.getXMLEditorService().getFile());

        try {
            XMLOutputter xmlOut = new XMLOutputter();
            org.jdom2.Document doc = new SAXBuilder().build(xml);
            Namespace ns = Namespace.getNamespace("http://www.xxx.com");
            org.jdom2.Element rootNode = doc.getRootElement();
            org.jdom2.Element typeContent = rootNode.getChildren().get(
                    objTypeIndex);

            List<Element> list = typeContent.getChildren("param", ns);

            if (list.size() > 0) {
                Element element = list.get(row);   //remove correct element
                element.removeContent();

                System.out.println("element removed: " + element.getName());
                xmlOut.setFormat(Format.getPrettyFormat());
                xmlOut.output(doc, new FileWriter(XMLEditorService
                        .getXMLEditorService().getFile()));

            }

        } catch (IOException io) {
            System.out.println(io.getMessage());
        } catch (JDOMException jdomex) {
            System.out.println(jdomex.getMessage());
        }

    }

Список, на который я ссылаюсь, это строка: List<Element> list = typeContent.getChildren("param", ns);

отладка


person Sembrano    schedule 18.02.2014    source источник
comment
Не могли бы вы предоставить минимальный пример с XML-документом, вызовом метода (например, deleteParameter(1,2)), ожидаемым результатом и тем, что вы видите в настоящее время?   -  person David M.    schedule 18.02.2014
comment
хорошо сделано Ive обновление. Просто не понимаю, почему это будет иметь отношение к questoin.   -  person Sembrano    schedule 18.02.2014
comment
Извините, кажется, я неправильно понял вопрос. Мне все еще непонятно, но, надеюсь, кто-то еще может вам помочь.   -  person David M.    schedule 18.02.2014
comment
хорошо, список элементов содержит: текст, элемент, текст, элемент и т. д. Но мне нужен только элемент, элемент, элемент. Есть ли способ отфильтровать текст?   -  person Sembrano    schedule 18.02.2014


Ответы (2)


Вызов метода: element.removeContent(); не удаляет элемент из его родителя, а вместо этого удаляет все содержимое из элемента (делает его пустым).

Вы, вероятно, просто хотите сделать: element.detach(); вместо этого.... который удалит элемент (и, как следствие, все его содержимое) из документа.

person rolfl    schedule 18.02.2014
comment
Хорошо, возможно, мой вопрос был неясен: список элементов содержит: текст, элемент, текст, элемент и т. д. Но мне нужен только элемент, элемент, элемент, чтобы я мог удалить правильный ‹param›. Есть ли способ отфильтровать текст? - person Sembrano; 18.02.2014
comment
@Sembrano Думаю, ты ошибаешься. Список элементов не будет содержать текста. Список «Содержание» будет состоять из текста, но typeContent.getChildren("param", ns) будет содержать только Element - person rolfl; 19.02.2014
comment
да, это правда, это ContentList сейчас, когда вы говорите мне, я все еще этого не понимаю. Я разместил свой список содержимого из моей отладки на картинке. А что это за текст и зачем он его создает? - person Sembrano; 19.02.2014
comment
Текст — это «пробел» между элементами, которые находятся в исходном документе, когда вы читаете его из файла. - person rolfl; 19.02.2014

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

person mithil-studytrails    schedule 20.02.2014