【问题标题】:XSL: access variable value with xml attribute valueXSL:使用 xml 属性值访问变量值
【发布时间】:2016-10-27 23:08:17
【问题描述】:

有这样的线条

<COLUMN name="CATEGORY_" type="VARCHAR_M"/>

在我的 XML 文件中。 在 xlst 文件的帮助下,我想用依赖于数据库的数据类型替换 VARCHAR_M。 所以我设置了

        <xsl:choose>
        <xsl:when test="$DatabaseSystem = 'DB2'">
            <xsl:variable name="VARCHAR_S" select="'varchar(64)'"/>
            <xsl:variable name="VARCHAR_M" select="'varchar(255)'"/>
            <xsl:variable name="VARCHAR_B" select="'varchar(4000)'"/>
            <xsl:variable name="INTEGER" select="'integer'"/>
        </xsl:when>
        <xsl:when test="$DatabaseSystem = 'Informix'">
            <xsl:variable name="VARCHAR_S" select="'varchar(64)'"/>
            <xsl:variable name="VARCHAR_M" select="'varchar(255)'"/>
            <xsl:variable name="VARCHAR_B" select="'lvarchar(4000)'"/>
            <xsl:variable name="INTEGER" select="'integer'"/>
        </xsl:when>
    </xsl:choose>

这个

<xsl:value-of select="@type"/>

从 xml 中给我属性的值,我如何使用它作为变量的名称?

类似

<xsl:value-of select="$@type"/>

.

【问题讨论】:

  • 我认为您将不得不选择一种不同的方法,您的变量仅在 xsl:when 内部定义,因此您甚至无法在外部访问它们。并且动态 XPath 评估不是 XSLT 1.0 和 2.0 中语言的一部分。您可能希望将值存储在 XML 结构中,然后从该结构中进行选择(您可能需要 exsl:node-set 或 XSLT 1.0 中的类似内容),这样您就可以选择值。
  • "我想用依赖于数据库的数据类型替换 VARCHAR_M。" 我在您的代码中看不到任何会导致这种情况的内容。我建议你解释一下这里需要应用的逻辑(带有更完整的输入示例)。目前,这似乎是XY question。

标签: xml xslt


【解决方案1】:

如果你放弃 并用与 xml 中相同的数据替换它,你可以做这样的事情......

<xsl:variable name="map">
    <db databaseSystem='DB2'>
        <type name="VARCHAR_S">varchar(64)</type>
        <type name="VARCHAR_M">varchar(255)</type>
        <type name="VARCHAR_B">varchar(400)</type>
        <type name="INTEGER">integer</type>
    </db>
    <db databaseSystem='Informix'>
        <type name="VARCHAR_S">varchar(64)</type>
        <type name="VARCHAR_M">varchar(255)</type>
        <type name="VARCHAR_B">varchar(400)</type>
        <type name="INTEGER">integer</type>
    </db>
</xsl:variable>

然后您可以像这样获取值...

<xsl:value-of select="$map/db[@databaseSystem='DB2']/type[@name='VARCHAR_M']"/>

显然,您不会使用固定字符串,并且在您自己的代码中,您将用变量或对您的 “有这样的行”的引用替换“DB2”和“VARCHAR_M”输入

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-12-05
    • 2019-09-23
    • 2015-02-20
    • 1970-01-01
    • 2012-12-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多