我有一个程序,它使用Java DOM读取XML文件并处理某些元素。例如,以下是我正在查看的文档的一部分:
<Flow>
<Id>306</Id>
<Type>Simple</Type>
<FlowContent Width="0.2000000000000000111">
<P Id="523"><T xml:space="preserve" Id="652">A spouse’s pension would be paid equal to <O Id="351"/>% of your Core pension at date of death.</T>
</P>
</FlowContent>
(注意:这是从一个名为GMC Inspire Designer的程序导出的,因此我无法控制其格式。)
我可以处理大多数元素,但是文本内容也存在问题,这些内容也包含元素。在上面的示例中,另一个布局对象<O Id="351"/>
(引用另一段文本或变量)出现在文本正文中。
我可以查找此元素并使用ID号检索它。这是上述代码段中链接的元素:
<Variable>
<Id>351</Id>
<Name>CAMT44</Name>
我想要做的是从链接节点输出信息(例如,我可以查找ID为351的节点并检索名称等,然后显示此信息代替元素在字符串中出现的位置)
我目前正在查找子项并将ID存储在字符串数组中,如下所示:
NodeList nl = e.getElementsByTagName("O");
sa = new String[nl.getLength()]; // Set up new array to hold child ids
for (int i = 0; i < nl.getLength(); i++) {
sa[i] = nodeToElement(nl.item(i)).getAttribute("Id");
}
我非常喜欢Java初学者,所以我一直在想DOM是否是这个项目的正确选择。也许我应该使用SAX,但由于我没有太多的XML经验,我不确定哪种最适合我的需求,正如我所提到的,我已经设法做了我需要的大部分事情,这只是我坚持的最后一个棘手的问题。
目前我的输出如下:
如果CR.SCHEME ==&#34; EXCT&#34; PRINT:
&#34;配偶的养老金将等于您的核心养老金的百分比 死亡日期,忽略了你可能选择转换的事实 退休后一部分养老金一次性支付。&#34;
子流:351
如果使用DOM有一些方法可以做到这一点会很棒。抱歉,如果有什么不清楚的话,我对此大部分内容都不熟悉。
答案 0 :(得分:0)
你应该可以这样做:
String output = "";
for (int i = 0; i < nl.getLength(); i++) {
Node n = nl.item(i);
if(n.getNodeType() == Node.TEXT_NODE) {
output += n.getTextContent();
} else if (n.getNodeType() == Node.ELEMENT_NODE && n.getNodeName().equals("O")) {
output += lookup(doc, ((Element)n).getAttribute("id"));
}
}
System.out.println(output);
查找方法是您需要自己实现的,但它看起来像这样:
private static String lookup(Document doc, String id) {
return "<IMPLEMENT_LOOKUP_HERE>";
}