【发布时间】:2009-09-08 17:03:49
【问题描述】:
我想将一个 XML 文件作为输入并输出相同的 XML,除了基于匹配某些节点特征的属性和文本的一些搜索/替换操作。
最好的通用方法是什么,是否有教程?
DOM 已退出,因为我无法保证能够将整个内容保存在内存中。
我不介意使用 SAX 或 StAX,但我希望默认行为是传递无操作过滤器;我曾经用 StAX 做过类似的事情,这很痛苦,不适用于命名空间,而且我不确定我是否包含了我需要处理的所有案例。
我认为 XSLT 不起作用(但不确定),因为它是声明性的,在确定要在输出中发出什么文本/属性时,我需要进行一些程序计算。
(人为的例子:
假设我正在寻找 XPath 为 /group/item/@number 的所有节点,并希望将 number 属性评估为整数,使用方法 public List<Integer> factorize(int i) 将其分解,将因子列表转换为以空格分隔的字符串,并在对应的/group/item节点上添加属性factors?
输入:
<group name="beatles"><item name="paul" number="64"></group>
<group name="rolling stones"><item name="mick" number="19"></group>
<group name="who"><item name="roger" number="515"></group>
预期输出:
<group name="beatles"><item name="paul" number="64" factors="2 2 2 2 2 2"></group>
<group name="rolling stones"><item name="mick" number="19" factors="19"></group>
<group name="who"><item name="roger" number="515" factors="103 5"></group>
)
更新:我让 StAX XMLEventReader/Writer 方法轻松工作,但它没有保留在我的应用程序中很重要的某些格式怪癖。 (我猜保存/加载 XML 的程序不支持有效的 XML 文件。>:( 啊。)有没有办法处理 XML 以最小化输入和输出之间的文本差异?(至少在字符数据方面。 )
【问题讨论】: