我在互联网上找到了关于将变量传递给其他模板的参考资料。我试图遵循所有引用,但是,我无法获得我需要填充的值。我有这个xml文件:
<Item>
<Test>
<ID>123345677</ID>
</Test>
<DisplayID>99884534</DisplayID>
</Item>
如果DisplayID不为null,我需要填充MsgId元素,否则从ID获取值。我的XSLT:
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes"/>
<xsl:template match="ID">
<xsl:variable name="IDV" select="substring(.,0,35)"/>
<xsl:apply-templates select="DisplayID">
<xsl:with-param name="IDP" select="$IDV"/>
</xsl:apply-templates>
</xsl:template>
<xsl:template match="DisplayID">
<xsl:param name="IDP"/>
<xsl:element name="MsgId">
<xsl:choose>
<xsl:when test=".!='' or ./*">
<xsl:value-of select="substring(.,0,35)"/>
</xsl:when>
<xsl:otherwise>
<xsl:value-of select="substring($IDP,0,35)"/>
</xsl:otherwise>
</xsl:choose>
</xsl:element>
</xsl:template>
如果DisplayID不为null,则该条件有效,但是,如果我删除了DisplayID的值,则ID中没有值。我不知道我是否正确地做到了。
非常感谢您的反馈。
答案 0 :(得分:0)
请试试这个,
参考演示:http://xsltransform.net/ejivdHb/16
function n(stringNum){
// some code that I don't want to write right now.
}
var fooBar = n("1,000,000");
// fooBar = 1000000
答案 1 :(得分:0)
由于这是标记的XSLT 2.0,@ TechBreak的match =“Item”模板可以替换为
<xsl:template match="Item">
<MsgId>
<xsl:value-of select="substring(
if (DisplayId != '')
then DisplayID
else Test/ID, 1 ,35)"/>
</MsgId>
</xsl:template>
(注意字符计数从1开始)