【发布时间】:2017-01-03 14:50:17
【问题描述】:
我有一个程序,它使用 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 号检索它。这是上面sn-p中链接的元素:
<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 == "EXCT" 打印:
“配偶的养老金将支付等于您的核心养老金的 % 死亡日期,忽略您可能选择皈依的事实 退休时将您的部分养老金一次性支付。”
子流量:351
如果有某种方法可以使用 DOM 做到这一点,那就太好了。抱歉,如果有任何不清楚的地方,我对大部分内容都是新手。
【问题讨论】:
-
您想要实现的目标并不明显。
<O Id="351">是否应该被其他以“351”标识的文本替换? -
嗨四十二,是的,这就是我想要实现的目标。我将使用此信息更新问题。
-
¿您在文档中有两个具有相同“id”的元素?
?
-
您好,我是 GMC Inspire Designer 的架构师,仅当只有一个布局模块时,导出的 id 才是唯一的,该模块实际上由名为 Layout 的 XML 元素定义,未在问题中显示。