输入xml -
<Term payInNumberOfDays=\"30\">
<Ext name=\"demo\">my</Ext>
</Term>
<Term payInNumberOfDays=\"0\">
<Ext name=\"demo\">value</Ext>
</Term>
<Term payInNumberOfDays=\"0\">
<Ext name=\"demo\">100</Ext>
</Term>
我想检查Ext @name="demo"
然后将所有Ext
元素值与-
连接起来
预期输出<MYDC>my-value-100</MYDC>
<xsl:variable name="var:v9">
<xsl:for-each select="Term">
<xsl:variable name="var:v30" select="userCSharp:LogicalEq(string(Ext/@name) , "demo")" />
<xsl:if test="string($var:v30)='true'">
<xsl:if test="position() = 1"> <xsl:value-of select="Ext/text()" /> - </xsl:if>
</xsl:if>
</xsl:for-each>
</xsl:variable>
<MYDC>
<xsl:value-of select="$var:v9" />
</MYDC>
答案 0 :(得分:2)
我不确定扩展函数在做什么以及为什么需要变量,但在普通的XSLT 1.0中你可以简单地使用
<xsl:template match="Ext">
<xsl:if test="position() > 1">-</xsl:if>
<xsl:value-of select="."/>
</xsl:template>
然后
<xsl:stylesheet
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:exsl="http://exslt.org/common"
xmlns:msxml="urn:schemas-microsoft-com:xslt"
exclude-result-prefixes="exsl msxml"
version="1.0">
<xsl:output method="xml" indent="yes"/>
<xsl:template match="@* | node()">
<xsl:copy>
<xsl:apply-templates select="@* | node()"/>
</xsl:copy>
</xsl:template>
<xsl:template match="root">
<MYDC>
<xsl:apply-templates select="Term/Ext[@name = 'demo']"/>
</MYDC>
</xsl:template>
<xsl:template match="Ext">
<xsl:if test="position() > 1">-</xsl:if>
<xsl:value-of select="."/>
</xsl:template>
</xsl:stylesheet>
请参阅http://xsltfiddle.liberty-development.net/bFukv8m
<root>
<Term payInNumberOfDays="30">
<Ext name="demo">my</Ext>
</Term>
<Term payInNumberOfDays="0">
<Ext name="demo">value</Ext>
</Term>
<Term payInNumberOfDays="0">
<Ext name="demo">100</Ext>
</Term>
</root>
转换
<MYDC>my-value-100</MYDC>
到
Pokeball