Разбор XML DOM Java Как пройти через несколько уровней узлов - PullRequest
0 голосов
/ 09 января 2012

У меня есть следующая структура xml

<clinic>
    <category>
        <employees>
            <medic>
                <medic_details>
                    <medic_name />
                    <medic_address />
                </medic_details>
                <pacients>
                    <pacient>
                        <pacient_details>
                            <pacient_name> ...
                            <pacient_address> ...             
                        </pacient_details>
                        <diagnostic>
                            <disease>
                                <disease_name>Disease</disease_name>
                                <treatment>Treatment</treatment>
                            </disease>
                            <disease>
                                <disease_name>Disease</disease_name>
                                <treatment>Treatment</treatment>
                            </disease>
                        </diagnostic>
                    </pacient>
                </pacients>
            <medic>
        </employees>
    </category>
</clinic>

У меня есть JTextArea, где я хочу показать информацию из файла xml.Например, для отображения каждого медика с его именем, адресом и лечением пациентов с их соответствующими именами у меня есть следующий код:

NodeList medicNList = doc.getElementsByTagName("medic");

for (int temp = 0; temp < medicNList.getLength(); temp++) {

        Node medicNode = medicNList.item(temp);
        Element eElement = (Element) medicNode;

        area.append("\n");
        area.append("Medic Name : " + getTagValue("medic_name", eElement) + "\n");
        area.append("Medic Address : " + getTagValue("medic_address", eElement) + "\n");
        area.append("\n");
        area.append("Pacients : \n");
        area.append("Pacient Name : " + getTagValue("pacient_name", eElement) + "\n");
        area.append("Pacient Name : " + getTagValue("pacient_address", eElement) + "\n");

        }

У меня вопрос, хочу ли я иметь более 1 болезнипо каждому пациенту, как отобразить все болезни для каждого пациента?Я не знаю, как "пройти" к диагностическому узлу для каждого пациента и показать соответствующие данные внутри

Ответы [ 2 ]

2 голосов
/ 09 января 2012

Ваш код выглядит неверно. В настоящее время у вас есть несколько пациентов (пациентов) на одного медика, поэтому вам следует перебирать список пациентов для каждого медика.

Затем повторяем заболевания для каждого пациента. Вам необходимо использовать метод getElementsByTagName для каждого вложения в XML. Кроме того, вам нужно пропустить множественные элементы, такие как <pacients>.

Я бы посоветовал вам использовать библиотеку XPath, поскольку она может значительно облегчить чтение кода. Есть много хороших там. Я бы порекомендовал Джаксен

0 голосов
/ 09 января 2012

Я бы попробовал htmlcleaner .

HTMLCleaner - это библиотека Java, используемая для безопасного анализа и преобразования любого найденного в Интернете HTML-кода в правильно сформированный XML.Это разработано, чтобы быть маленьким, быстрым, гибким и независимым.HtmlCleaner может использоваться в коде Java, как инструмент командной строки или как задача Ant.Результатом анализа является облегченная объектная модель документа, которую можно легко преобразовать в стандарты, такие как DOM или JDom, или различными способами сериализовать в вывод XML (компактный, довольно печатный и т. Д.).

Вы можете использоватьXPath с htmlcleaner для получения содержимого в тегах xml. Вот хороший пример
Пример Xpath

...