今天我真的在与XSLT斗争,我已经很长时间不得不使用它了。我要编辑一些 xml和我不能使用XSLT 2.0。所以我必须使用1.0。 xml im struugling是(基本示例):
我尝试为2个节点制作模板,然后“调用”该模板以创建具有所需值的新节点,但这也没有用,如果有人能指出我正确的方向,我会遗漏一些东西。
<messagemap>
<author>
<au_id>274-80-9391</au_id>
<au_lname>Straight</au_lname>
<au_fname>Dean</au_fname>
<phone>415 834-2919</phone>
<address>5420 College Av.</address>
<city>Oakland</city>
<state>CA</state>
<zip>94609</zip>
<contract>1</contract>
</author>
</messagemap>
XM:
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output indent="yes"/>
<!--Identity Transform.-->
<xsl:template match="node()|@*">
<xsl:copy>
<xsl:apply-templates select="node()|@*"/>
</xsl:copy>
</xsl:template>
<xsl:template match="au_fname | au_lname">
<company>
<xsl:value-of select="."/>
</company>
</xsl:template>
</xsl:stylesheet>
我得到的结果是:
<messagemap>
<author>
<au_id>274-80-9391</au_id>
<company>Straight</company>
<company>Dean</company>
<phone>415 834-2919</phone>
<address>5420 College Av.</address>
<city>Oakland</city>
<state>CA</state>
<zip>94609</zip>
<contract>1</contract>
</author>
</messagemap>
我需要的是:
<messagemap>
<author>
<au_id>274-80-9391</au_id>
<company>Dean Straight</company>
<phone>415 834-2919</phone>
<address>5420 College Av.</address>
<city>Oakland</city>
<state>CA</state>
<zip>94609</zip>
<contract>1</contract>
</author>
</messagemap>
答案 0 :(得分:3)
您可以尝试匹配au_fname
并构建company
。然后你可以剥离au_lname
。
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="*"/>
<!--Identity Transform.-->
<xsl:template match="node()|@*">
<xsl:copy>
<xsl:apply-templates select="node()|@*"/>
</xsl:copy>
</xsl:template>
<xsl:template match="au_fname">
<company>
<xsl:value-of select="normalize-space(concat(.,' ',../au_lname))"/>
</company>
</xsl:template>
<xsl:template match="au_lname"/>
</xsl:stylesheet>