【发布时间】:2016-08-21 11:44:31
【问题描述】:
我有一个如下的示例 xml,
<doc>
<para>AAAAA BBB<s/>CCC DDD<l/>EEEE<t/>FFFFF <style>GGGG</style>HHHHHH</para>
</doc>
使用 XSLT 我必须将其转换为相同的节点树,但将名称属性添加到名为 'name' 的 <para> 节点,它的值应该是 <para> 元素的内容文本。
所以输出应该是这样的,
<doc>
<p name="AAAAA BBB CCC DDD EEEE FFFFF GGGG HHHHHH">AAAAA BBB<s/>CCC DDD<l/>EEEE<t/>FFFFF <style>GGGG</style>HHHHHH</p>
</doc>
正如您在输出中看到的,所有文本节点都应复制到 name 属性值 a 并且所有内联元素 (<s/>,<t/>,<l/>,<style>) 必须被删除。并且所有<s/>、<t/>、<l/> 都必须替换为空格。
我为此写了以下 xslt,
<xsl:template match="p">
<p name="{abc:process-attr-text(child::node())}">
<xsl:apply-templates/>
</p>
</xsl:template>
<xsl:function name="abc:process-attr-text">
<xsl:param name="node"/>
<xsl:sequence select="$node/text()"/>
</xsl:function>
它给出以下输出,
<doc>
<p name="GGGG">AAAAA BBB<s/>CCC DDD<l/>EEEE<t/>FFFFF <style>GGGG</style> HHHHHH</p>
</doc>
如何修改我的函数以获得正确的结果?
【问题讨论】: