Java的DOM XML解析如何通过多个节点级别
问题描述:
走,我有以下XML结构Java的DOM 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文件信息。例如,用于显示每个军医,它的名字,ADRESS,并与各自的名称治疗pacients,我有以下代码:
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超过1种病,如何显示每位患者的所有疾病?我不知道如何“步行”到每个pacient的诊断节点并显示里面的相关数据
答
您的代码看起来不正确。您目前每名医生有多名患者(患者),因此您应该重复每名医师的患者名单。
然后为每位患者重复疾病。对于XML中的每个嵌套,您需要使用getElementsByTagName
方法。另外你需要跳过复杂的元素,如<pacients>
。
我建议您使用XPath库,因为它可以使代码更容易阅读。那里有很多好玩的。我会推荐jaxen
答
我会给htmlcleaner一试。
HTMLCleaner是Java库,用于安全地解析和转换Web上发现的任何HTML到格式良好的XML。它设计的小巧,快速,灵活和独立。 HtmlCleaner可用于Java代码,命令行工具或Ant任务。解析结果是轻量级的文档对象模型,可以很容易地转换为DOM或JDom等标准,或以各种方式(紧凑,漂亮打印等)序列化为XML输出。
您可以使用XPath
与htmlcleaner到XML tags.Here内获取内容是一个很好的
例如Xpath Example
因此,例如,对于迭代患者列表每个军医,我应该有,里面的“ for“循环,像NodeList pacientNList = medicNode.getElementsByTagName(”pacient“); ? – user573382 2012-01-08 23:43:54
差不多,你需要在医生节点和pacient儿童之间在pacients节点上做这件事。 – 2012-01-08 23:51:59