我想编写一个模板来处理某个部分并重复使用它。
在下面的XML中,我们看到每个中都重复了消息。我想编写一个模板来处理并在需要时调用它。
<Data>
<A>
<text>this is text</text>
<Message>
<local>Local link</local>
<STD>External link</STD>
</Message>
</A>
<B>
<info>Information</info>
<Message>
<local>Local uri link</local>
<STD>External link uri</STD>
</Message>
</B>
<C>
<longtext>Long Text</longtext>
<Message>
<local>Local uri link</local>
<STD>External link uri</STD>
</Message>
</C>
<Data>
需要输出:
<Information>
<AA>
this is text
<MSG local value="Local uri link" STD value="External link"/>
</AA>
<BB>
Information
<MSG local value ="Local uri link" STD value="External link"/>
</BB>
<CC>
Long Text
<MSG local value="Local uri link" STD value="External link"/>
</CC>
<Information>
在处理每个节点中的标记时,我正在为A,B,C中的每个标记编写代码。
编写示例代码
<Information>
<xsl:template match="A">
<AA>
<xsl:value-of select="text"/>
<xsl:element name="MSG">
<xsl:attribute name="local value">
<xsl:value-of select="Message/local"/>
</xsl:attribute>
<xsl:attribute name="STD value">
<xsl:value-of select="Message/STD"/>
</xsl:attribute>
</AA>
</Information>
类似地,对于每个模板,我明确地为块MSG编写代码。
现在我想写一个单独的模板来处理。我想从每个模板中调用此模板。
基本上我想重用写入进程的代码
任何人都可以帮我解决这个问题。
谢谢。
答案 0 :(得分:3)
以下是一个示例:
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="@* | node()">
<xsl:copy>
<xsl:apply-templates select="@* | node()"/>
</xsl:copy>
</xsl:template>
<xsl:template match="Data">
<Information>
<xsl:apply-templates/>
</Information>
</xsl:template>
<xsl:template match="Data/*">
<xsl:element name="{local-name()}{local-name()}">
<xsl:apply-templates/>
</xsl:element>
</xsl:template>
<xsl:template match="Data/A/text | Data/B/info | Data/C/longtext">
<xsl:apply-templates/>
</xsl:template>
<xsl:template match="Message">
<MSG local-value="{local}" STD-value="{STD}"/>
</xsl:template>
</xsl:stylesheet>
应用于输入
<Data>
<A>
<text>this is text</text>
<Message>
<local>Local link</local>
<STD>External link</STD>
</Message>
</A>
<B>
<info>Information</info>
<Message>
<local>Local uri link</local>
<STD>External link uri</STD>
</Message>
</B>
<C>
<longtext>Long Text</longtext>
<Message>
<local>Local uri link</local>
<STD>External link uri</STD>
</Message>
</C>
</Data>
Saxon 6.5.5输出
<?xml version="1.0" encoding="utf-8"?><Information>
<AA>
this is text
<MSG local-value="Local link" STD-value="External link"/>
</AA>
<BB>
Information
<MSG local-value="Local uri link" STD-value="External link uri"/>
</BB>
<CC>
Long Text
<MSG local-value="Local uri link" STD-value="External link uri"/>
</CC>
</Information>
您发布的输入示例和所需的输出示例都不是格式良好的XML,因此我必须对要处理的元素或属性名称进行一些更改以及输出XML。