我有一个具有以下结构的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合并。
发布于 2013-03-05 13:46:53
除了执行任何类型的XML转换之外,还有一个选项是导入另一个XML文件,然后从标记中引用它。有关示例,请参见这里。
这将要求您的用户对可能不想要的每种模板类型都有单独的模板文件。但是,由于接吻原则的存在,我更喜欢导入方法。如果您不熟悉XSLT,那么导入可能也是一种更好的方法。
我希望这能帮到你!
https://stackoverflow.com/questions/15224991
复制相似问题