【问题标题】:Java DOM XML Parsing How to walk through multiple node levelsJava DOM XML Parsing 如何遍历多个节点级别
【发布时间】:2012-01-08 23:05:39
【问题描述】:

我有以下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 种以上的疾病,我如何显示每位患者的所有疾病?我不知道如何“步行”到每个病人的诊断节点并显示里面的相关数据

【问题讨论】:

    标签: java xml dom xml-parsing domparser


    【解决方案1】:

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

    然后为每个患者迭代疾病。您需要对 XML 中的每个嵌套使用 getElementsByTagName 方法。另外,您需要跳过&lt;pacients&gt;等复数元素。

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

    【讨论】:

    • 例如,为了迭代每个医生的患者列表,我应该在“for”循环内有类似 NodeList pacientNList = medicNode.getElementsByTagName("pacient"); ?
    • 几乎,您需要在 pacients 节点上执行此操作,因为它位于 medic 节点和 pacient 孩子之间。
    【解决方案2】:

    我会试试htmlcleaner

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-05-07
      • 2017-10-22
      • 1970-01-01
      • 2017-07-22
      • 2011-09-11
      • 2017-09-18
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多