powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Java [игнор отключен] [закрыт для гостей] / Работа с библиотекой Dom4j
14 сообщений из 14, страница 1 из 1
Работа с библиотекой Dom4j
    #38116863
alexey94
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Здравствуйте. Есть xml-файл с такой структурой:
Код: xml
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
<first>
    <second>
         <third>
                one, two, three
         </third>
         <third>
                four, five, six
         </third>
    </second>
    <second>
          <third>
                seven, eight, nine
          </third>
          <third>
                one, eight, two
          </third>
    </second>
</first>



В зависимости от содержимого элемента <third>, нужно вывести всё содержимое <second>, в т.ч. и вложенные элементы. Т.е. если переменная String abc="one", то "one" разыскивается в тегах <third> и где найдена, там выводится всё содержимое тега <second> вместе с дочерними элементами.
Вытащить из xml-ля содержимое одного тега можно таким образом NodeList children = element.getElementsByTagName("third"), но как узнать какой именно тег <third> нужно взять, в зависимости от его содержимого и как вытащить вместе с ним и родительский элемент, есть ли для этого стандартный метод в dom4j ?
...
Рейтинг: 0 / 0
Работа с библиотекой Dom4j
    #38117115
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Метод получения родительского элемента сложно не найти
http://dom4j.sourceforge.net/dom4j-1.6.1/apidocs/org/dom4j/Node.html#getParent%28%29
Сам вопрос не очень понял. Либо используйте xpath для сложного поиска. Либо перебирайте ноды, анализируйте содержимое.
...
Рейтинг: 0 / 0
Работа с библиотекой Dom4j
    #38117165
alexey94
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
BlazkowiczСам вопрос не очень понял.
Ну, суть в том, что программа анализирует содержимое тега <third> на наличие какого-то слова, если находит, например, слово "five", то выводит на экран всю ветку, включая родительский элемент
Код: xml
1.
2.
3.
4.
5.
6.
7.
8.
9.
    
<second>
         <third>
                one, two, three
         </third>
         <third>
                four, five, six
         </third>
</second>
...
Рейтинг: 0 / 0
Работа с библиотекой Dom4j
    #38117189
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
И в чем конкретно проблема?
...
Рейтинг: 0 / 0
Работа с библиотекой Dom4j
    #38117205
alexey94
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
BlazkowiczИ в чем конкретно проблема?
В общем, я нахожу слово "five", теперь мне нужно вывести элемент, в котором я его нашел и его родительский элемент, вот так
Код: xml
1.
2.
3.
4.
5.
6.
7.
<first>
    <second>
         <third>
                four, five, six
         </third>
    </second>
</first>


Проблема в том, что я не знаю, как найдя слово "five", потом подобраться к тегу <third>, в котором оно содержится и вывести именно тот тег <third>, в содержимом которого есть слово "five" и его родительский элемент <second>, а не просто все теги <third>, которые есть в документе xml.
...
Рейтинг: 0 / 0
Работа с библиотекой Dom4j
    #38117214
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Посмотри как в XPath можно получить родителя.

http://www.w3schools.com/xpath/xpath_axes.asp
...
Рейтинг: 0 / 0
Работа с библиотекой Dom4j
    #38117532
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
alexey94Проблема в том, что я не знаю, как найдя слово "five", потом подобраться к тегу <third>, в котором оно содержится и вывести именно тот тег <third>, в содержимом которого есть слово "five" и его родительский элемент <second>, а не просто все теги <third>, которые есть в документе xml.
В чем сложность. Перебором находим элемент, у которого нет дочерних элеметов. Читаем его textContent. Если в textContent имеется искомое слово и это "third". То это наш элемент. Это так трудно запрограммировать?
...
Рейтинг: 0 / 0
Работа с библиотекой Dom4j
    #38117535
alexander00513
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
dom4j - это требование ? Если нет - можно попробовать использовать Jaxb, представив ноды xml в виде объектов, а дальше циклом перебирать их...
...
Рейтинг: 0 / 0
Работа с библиотекой Dom4j
    #38117978
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
alexander00513dom4j - это требование ? Если нет - можно попробовать использовать Jaxb, представив ноды xml в виде объектов, а дальше циклом перебирать их...
Цикл хорош только в простейших случаях. Если автору нужно оглядываться назад на несколько тегов
или наоборот смотреть вперёд то решение с циклом будет весьма сложно и чревато ошибками.
...
Рейтинг: 0 / 0
Работа с библиотекой Dom4j
    #38118006
alexander00513
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Согласен..
...
Рейтинг: 0 / 0
Работа с библиотекой Dom4j
    #38118683
alexey94
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Blazkowiczalexey94Проблема в том, что я не знаю, как найдя слово "five", потом подобраться к тегу <third>, в котором оно содержится и вывести именно тот тег <third>, в содержимом которого есть слово "five" и его родительский элемент <second>, а не просто все теги <third>, которые есть в документе xml.
В чем сложность. Перебором находим элемент, у которого нет дочерних элеметов. Читаем его textContent. Если в textContent имеется искомое слово и это "third". То это наш элемент. Это так трудно запрограммировать?
Спасибо, попробую так сделать. Запрограммировать то не сложно, а вот додуматься да
...
Рейтинг: 0 / 0
Работа с библиотекой Dom4j
    #38119767
alexey94
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я сделал вот так:
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
public class JavaApplication3 {

        public static void main(String[] args) throws Exception {
        SAXBuilder builder = new SAXBuilder();
        Document doc = builder.build(new File("f.xml"));
        String a = "one";
        List list = XPath.selectNodes(doc, ".//second/third"); //без переменной
        System.out.println(list);
    }
}


Он выводит четыре пустых закрытых тега
Код: xml
1.
[[Element: <third/>], [Element: <third/>], [Element: <third/>], [Element: <third/>]]



А когда сделал вот так:
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
public class JavaApplication3 {

        public static void main(String[] args) throws Exception {
        SAXBuilder builder = new SAXBuilder();
        Document doc = builder.build(new File("f.xml"));
        String a = "one";
        List list = XPath.selectNodes(doc, "//second/third/text()='"+a+"'"); // подставил переменную
        System.out.println(list);
    }
}


Выводит
Код: xml
1.
[false]



А как сделать так, чтобы он выводит текст вместе с тегами, хотя бы с теми, в которые этот текст заключен?
...
Рейтинг: 0 / 0
Работа с библиотекой Dom4j
    #38119821
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В дебаге посмотрите. Элементы List это Node. У Node можно вызвать соответствующие методы и получить содержимой.
...
Рейтинг: 0 / 0
Работа с библиотекой Dom4j
    #38119848
alexey94
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Blazkowicz,

Сейчас уже вот так написал
Код: java
1.
List list = XPath.selectNodes(doc, ".//second/third/child::text()");


Теперь выводит текстовое наполнение тега <third>, буду дальше разбираться
...
Рейтинг: 0 / 0
14 сообщений из 14, страница 1 из 1
Форумы / Java [игнор отключен] [закрыт для гостей] / Работа с библиотекой Dom4j
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]