我有一个名为paths.xml的xml,它可以包含1到X个XMl文件的文件路径,我需要将它们合并到一个文件路径中以便进一步处理。
我使用下面的样式表来执行此操作,但现在我需要在同一转换中按输出文件中的属性对数据进行分组。我已经研究了muenchian分组,但是无法弄清楚如何在复制的相同样式表中实现它?
每个XML仅包含其组的标记。我想要实现的输出是每个XML在一个新元素下分组,其中groups属性名为其值。
有什么想法吗?
我的样式表:
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml"
doctype-system="http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"
doctype-public="-//W3C//DTD XHTML 1.0 Strict//EN" indent="yes" omit-xml-declaration="no" />
<xsl:template match="/">
<xsl:copy-of select="document(document('paths.xml')//file/path)/*/node()"/>
</xsl:template>
</xsl:stylesheet>
合并前的XML示例:
<?xml version="1.0" encoding="UTF-8"?>
<tags generator="xmlgenerator" id="123">
<tag group="group1">
<title lang="eng">title1</title>
</tag>
<tag group="group1">
<title lang="se">title2</title>
</tag>
<tag group="group1">
<title lang="eng">title3</title>
</tag>
</tags>
通缉输出:
<?xml version="1.0" encoding="UTF-8"?>
<tagcollection>
<group1>
<tag>
<title lang="rus">title1</title>
</tag>
<tag>
<title lang="se">title2</title>
</tag>
</group1>
<group2>
<tag>
<title lang="eng">title1</title>
</tag>
<tag>
<title lang="se">title2</title>
</tag>
</group2>
</tagcollection>
答案 0 :(得分:1)
更改
<xsl:template match="/">
<xsl:copy-of select="document(document('paths.xml')//file/path)/*/node()"/>
</xsl:template>
到
<xsl:template match="/">
<tagcollection>
<xsl:apply-templates select="document(document('paths.xml')//file/path)/*"/>
</tagcollection>
</xsl:template>
然后添加Muenchian分组的密钥
<xsl:key name="group" match="tag" use="@group"/>
以及用于分组的模板
<xsl:template match="/*">
<xsl:apply-templates select="tag[generate-id() = generate-id(key('group', @group)[1])]" mode="group"/>
</xsl:template>
<xsl:template match="tag" mode="group">
<xsl:element name="{@group}">
<xsl:apply-templates select="key('group', @group)"/>
</xsl:element>
</xsl:template>
<xsl:template match="tag/@group"/>
<xsl:template match="@* | node()">
<xsl:copy>
<xsl:apply-templates select="@* | node()"/>
</xsl:copy>
</xsl:template>
您没有显示输入文档的确切结构和嵌套,上面假设了一个像
这样的结构<root>
<tag group="group1">
<title lang="eng">title1</title>
</tag>
<tag group="group1">
<title lang="se">title2</title>
</tag>
<tag group="group1">
<title lang="eng">title3</title>
</tag>
</root>
实际上根元素的确切名称无关紧要。