【发布时间】:2014-03-26 16:58:11
【问题描述】:
我想用另一个 XML 文件的等效节点替换 XML 文件的某些节点。由于这不够具有挑战性,我希望用于比较的 ID 是某个孩子的值。
“旧”XML 看起来像:
<?xml version="1.0" encoding="UTF-8"?>
<Root>
<Documents>
<Document id="001">
<Tags>
<Tag id="document_id">someIDfilename.pdf</Tag>
<Tag id="document_type">Type A</Tag>
<Tag id="document_text">A very important document of course.</Tag>
<Tags>
</Document>
<Document id="018">
<Tags>
<Tag id="document_id">someOtherIDfilename.pdf</Tag>
<Tag id="document_type">Type B</Tag>
<Tag id="document_text">Another very important document.</Tag>
<Tags>
</Document>
</Documents>
</Root>
第二个文档应替换为以下 XML 的等效项,其中我必须使用的 ID 是 document_id 的值(因为 Document 节点的“id”有时会被覆盖或更改):
<?xml version="1.0" encoding="UTF-8"?>
<Root>
<Documents>
<Document id="014">
<Tags>
<Tag id="document_id">someOtherIDfilename.pdf</Tag>
<Tag id="document_type">Type B</Tag>
<Tag id="document_text">The oh so important new document text.</Tag>
<Tags>
</Document>
</Documents>
</Root>
结果应该是这样的:
<?xml version="1.0" encoding="UTF-8"?>
<Root>
<Documents>
<Document id="001">
<Tags>
<Tag id="document_id">someIDfilename.pdf</Tag>
<Tag id="document_type">Type A</Tag>
<Tag id="document_text">A very important document of course.</Tag>
<Tags>
</Document>
<Document id="018">
<Tags>
<Tag id="document_id">someOtherIDfilename.pdf</Tag>
<Tag id="document_type">Type B</Tag>
<Tag id="document_text">The oh so important new document text.</Tag>
<Tags>
</Document>
</Documents>
</Root>
Q1:这可以通过 XSLT 实现吗?还是我必须使用 Java / DOM?
Q2:如果 Q1==yes :有人可以在这里解决这个问题吗?
最好的!菲利普
【问题讨论】:
-
您使用的是 XSLT 1.0 还是 2.0 处理器?为什么想要的结果
018中的id属性是014,而不是014,这是您说要从中进行替换的第二个文档中的属性? -
目前我只允许使用 XSLT 1.0 处理器。出于进一步处理的原因,旧的 id 属性将是首选。