获取另一个模板的变量值



我在Internet中发现了有关变量传递到其他模板的引用。我试图遵循所有参考文献,但是我无法获得需要填充的价值。我有这个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中获得的值。我不知道我是否正确地做。

您的反馈非常感谢。

请尝试一下,

参考的演示:http://xsltransform.net/ejivdhb/16

<xsl:stylesheet version="1.0" 
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:ns1="http://locomotive/bypass/docx" >
<xsl:output method="xml" version="1.0" encoding="UTF-8" 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="Item">
    <xsl:element name="MsgId">
        <xsl:choose>
            <xsl:when test="DisplayID !='' ">
                <xsl:value-of select="substring(DisplayID , 0 ,35)"/>
            </xsl:when>
            <xsl:otherwise>
                <xsl:value-of select="substring(Test/ID,0,35)"/>
            </xsl:otherwise>
        </xsl:choose>
    </xsl:element>
</xsl:template>
</xsl:stylesheet>

由于标记为xslt 2.0,因此可以用

替换@TechBreak的匹配=" item"模板
<xsl:template match="Item">
    <MsgId>
        <xsl:value-of select="substring(
            if (DisplayId != '') 
            then DisplayID 
            else Test/ID, 1 ,35)"/>
    </MsgId>
</xsl:template>

(注意字符计数从1开始)

相关内容

  • 没有找到相关文章

最新更新