【问题标题】:xslt apply-templatexslt 应用模板
【发布时间】:2012-04-17 14:46:11
【问题描述】:

无法成功在 xsl (1.0) 中为 .似乎无法动态修改“选择”的内容。下面是一个不会引发错误但无法识别 $entity 参数的尝试:

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
    <xsl:output cdata-section-elements="" encoding="UTF-8" indent="yes" method="xml" omit-xml-declaration="yes"/>   
    <xsl:param name="entity">CreditController[]</xsl:param>
        <xsl:template match="/">
            <xsl:element name="variable">
                  <xsl:attribute name="type">NameValuePair[]</xsl:attribute>
                      <xsl:apply-templates select="variable/*[@type='$entity']/item"/>                      
            </xsl:element>
    </xsl:template>

    <xsl:template match="item">                 
            <xsl:element name="item">
            <xsl:attribute name="type">NameValuePair</xsl:attribute>
            <xsl:element name="value">
                <xsl:attribute name="type">String</xsl:attribute>
                <xsl:value-of select="Code"/>
            </xsl:element>
            <xsl:element name="name">
                <xsl:attribute name="type">String</xsl:attribute>
                <xsl:value-of select="Code"/>-<xsl:value-of select="Value"/>
            </xsl:element>
            </xsl:element>
    </xsl:template>

</xsl:stylesheet>

提前致谢。其他帖子似乎建议使用并设置元素的“模式”属性。这两个我都没有赢。

用字符串文字“CreditController[]”替换实体变量可以按预期工作。

【问题讨论】:

  • 你能发布你的输入 xml 的样本吗?
  • 不应该只是@type=$entity吗?用引号括住$entity 使其成为字符串$entity
  • 我认为阿维拉的答案是正确的,应该作为答案输入,这样才能被接受。

标签: xslt xpath xslt-1.0


【解决方案1】:

在您的 XPath 中,您将 $entity 用引号括起来,使其成为字符串文字 $entity 而不是要扩展的变量。

去掉引号:

<xsl:apply-templates select="variable/*[@type=$entity]/item"/>                      

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-08-06
    相关资源
    最近更新 更多