我有一个具有以下结构的 XML 文件(多个“实体”节点):
<!-- entities.xml -->
<root>
<entity template="foo-template" kind="foo" name="bar">
<groups>
<group id="1">
<definition id="1" name="foobar" />
</group>
</groups>
</entity>
</root>
许多entity
节点具有相似的属性和子节点。我想允许用户entity
在单独的文件中创建模板。引用模板将按如下方式完成:
<entity template="foo-template" kind="foo" ... />
“foo-template”中的每个属性和子节点都应该复制到 中entity
,除了那些已经存在的(即允许覆盖模板)。
我对 XSLT 不是很熟悉。它是完成这项任务的正确工具,还是没有它我最好实现它?
我正在使用 C++ 和 RapidXml,但可以使用其他 XML 库。
编辑:示例。
模板文件:
<!-- templates.xml -->
<templates>
<entity template="foo-template" name="n/a" model="baz">
<groups>
<group id="1">
<definition id="1" name="def1" />
<definition id="2" name="def2" />
</group>
<group id="2">
<definition id="1" name="def3" />
<definition id="2" name="def4" />
</group>
</groups>
</entity>
</templates>
输出文件:
<!-- output.xml -->
<root>
<entity kind="foo" name="bar" model="baz">
<groups>
<group id="1">
<definition id="1" name="foobar" />
</group>
<group id="2">
<definition id="1" name="def3" />
<definition id="2" name="def4" />
</group>
</groups>
</entity>
</root>
因此输出包含来自“entities.xml”的第 1 组和来自“templates.xml”的第 2 组。无需合并group
具有相同 id 的节点。