Java DOM XML Parsing如何遍历多个节点级别

时间:2012-01-08 23:05:39

标签: java xml dom xml-parsing domparser

我有以下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");

        }

我的问题是,如果我想每次服用多于一种疾病,我该如何为每个患者展示所有疾病?我不知道如何“走”到每个pacient的诊断节点并在

中显示相关数据

2 个答案:

答案 0 :(得分:2)

您的代码看起来不正确。您目前每个医生有多个pacient(患者),因此您应该迭代每个医生的患者列表。

然后为每位患者重复疾病。您需要对XML中的每个嵌套使用getElementsByTagName方法。另外,您需要跳过复数元素,例如<pacients>

我建议您使用XPath库,因为它可以使代码更容易阅读。那里有很多好的。我建议jaxen

答案 1 :(得分:0)

我会试试htmlcleaner

  

HTMLCleaner是一个Java库,用于安全地解析和转换在Web上找到的任何HTML到格式良好的XML。它设计小巧,快速,灵活且独立。 HtmlCleaner可用于java代码,命令行工具或Ant任务。解析的结果是轻量级文档对象模型,可以很容易地转换为DOM或JDom等标准,或者以各种方式序列化为XML输出(紧凑,漂亮的打印等)。

你可以使用XPath和htmlcleaner来获取xml标签内的内容。这是一个不错的选择      例如Xpath Example