我想在Xml中使用XSLT动态创建与Main xml中的<Group>
元素一样多的<Group folder ="Group1">
元素。另外,添加为最后一个子元素的<Data>
元素只能在内部添加一次。
主要Xml
<Root>
<ClassA>
<Groups>
<Group1>
<Group2>
<Group3>
............
</Group3>
</Group2>
</Group1>
</Groups>
<Data>
<Name>George</Name>
<Class>A</Class>
</Data>
</ClassA>
</Root>
我需要这样的Xml
<Data>
<ClassA>
<Group folder = "Group1">
<Group folder = "Group2">
<Group folder = "Group3">
............
<Data>
<Name>George</Name>
<Class>A</Class>
</Data>
</Group>
</Group>
</Group>
</ClassA>
</Data>
答案 0 :(得分:0)
实际上,您需要以下模板:
匹配Root
。生成<Data>
元素并在其中
将模板应用于自己的全部内容。
匹配ClassA
。复制自己的元素并在内部复制
将模板应用于子Groups
元素的内容。
匹配名称中包含Group
,然后包含数字的元素。
使用适当的Group
属性创建folder
元素。
将模板应用于其内容(如果有)。
如果此元素不包含任何子元素,请复制
来自祖先Data
的{{1}}元素。
身份模板。
因此整个脚本如下所示:
ClassA
有关工作示例,请参见http://xsltransform.net/nb9MWtw
答案 1 :(得分:0)
<xsl:output method="xml" indent="yes"/>
<xsl:template match="Root">
<xsl:element name="Data">
<xsl:apply-templates/>
</xsl:element>
</xsl:template>
<xsl:template match="ClassA">
<xsl:element name="ClassA">
<group floder="{Groups/Group1/name()}">
<group floder="{Groups/Group1/Group2/name()}">
<group floder="{Groups/Group1/Group2/Group3/name()}">
<xsl:value-of select="Groups/Group1/Group2/Group3"/>
<xsl:copy-of select="Data"/>
</group>
</group>
</group>
</xsl:element>
</xsl:template>
尝试对您有益。