我正在通过XSLT进行XML到XML的转换。
我想从元素中提取aprtial值,并将其作为属性赋值给新元素。
源XML:
<content>
<component>
<aaa>HI
<strong>[a_b_c]</strong>
: More Information Needed
<strong>[d_e_f]</strong>XXX
</aaa>
</component>
<content>
目标XML:
<ddd>hi<dv name='a_b_c'/>: More Information Needed <dv name='d_e_f'/> XXX
</ddd>
任何人都可以通过XSLT建议如何做到这一点。
提前谢谢。
答案 0 :(得分:0)
XSLT 1.0
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output indent="yes"/>
<xsl:strip-space elements="*"/>
<xsl:template match="aaa">
<ddd>
<xsl:value-of select="substring-before(.,'[')"/>
<dv name="{substring-before(substring-after(.,'['),']')}"/>
</ddd>
</xsl:template>
</xsl:stylesheet>
或
XSLT 2.0
<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output indent="yes"/>
<xsl:strip-space elements="*"/>
<xsl:template match="aaa">
<ddd>
<xsl:value-of select="tokenize(.,'\[')[1]"/>
<dv name="{tokenize(tokenize(.,'\[')[2],'\]')[1]}"/>
</ddd>
</xsl:template>
</xsl:stylesheet>
修改强>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output indent="yes"/>
<xsl:strip-space elements="*"/>
<xsl:template match="node()|@*">
<xsl:copy>
<xsl:apply-templates select="node()|@*"/>
</xsl:copy>
</xsl:template>
<xsl:template match="aaa">
<ddd>
<xsl:apply-templates select="node()|@*"/>
</ddd>
</xsl:template>
<xsl:template match="content|component">
<xsl:apply-templates/>
</xsl:template>
<xsl:template match="strong">
<dv name="{normalize-space(.)}"/>
</xsl:template>
</xsl:stylesheet>