【问题标题】:XSLT transformation: accessing inline mappingXSLT 转换:访问内联映射
【发布时间】:2016-04-20 04:10:15
【问题描述】:

我在使用内联结构并在 xslt 中访问它时遇到问题:

我编写了一个将 xml 转换为 xml 的转换。 对于某些值,我必须查找键值映射,我在样式表中已指定如下:

<map:mappings>
   <mapping doi="DOI_VALUE1" name="NAME1"/>
   <mapping doi="DOI_VALUE2" name="NAME2"/>
</map:mappings>

在我的转换中,我将像这样访问这个映射:

<elementXY>
   <xsl:value-of select="document('')//map:mappings/mapping[@name=$var]/@doi"/>
</elementXY>

这很好用,但由于涉及到第 3 方软件——它不喜欢“document('')”功能——我正在寻找另一种可能性/替代方案。

如果需要更多信息,我很乐意提供。 提前致谢!

【问题讨论】:

    标签: xml xslt mapping document


    【解决方案1】:

    假设您可以访问 exsl:node-set 或类似的,您可以使用

    <xsl:param name="mappings-rtf">
    <map:mappings>
       <mapping doi="DOI_VALUE1" name="NAME1"/>
       <mapping doi="DOI_VALUE2" name="NAME2"/>
    </map:mappings>
    </xsl:param>
    
    <xsl:variable name="mappings-ns" xmlns:exsl="http://exslt.org/common" select="exsl:node-set($mappings-rtf)"/>
    

    然后你可以使用&lt;xsl:value-of select="$mappings-ns/map:mappings/mapping[@name=$var]/@doi"/&gt;

    为了提高效率,您可能需要定义一个键 &lt;xsl:key name="map" match="map:mappings/mapping" use="@name"/&gt; 然后您可以使用

    <xsl:for-each select="$mappings-ns"><!-- need to do this to change context document -->
      <xsl:value-of select="key('map', $var)/@doi"/>
    </xsl:for-each>
    

    【讨论】:

    • 非常感谢这正在工作,但我能够更改 3rdparty 软件。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-04-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-10-05
    相关资源
    最近更新 更多