XSLT转换:访问内联映射

时间:2016-01-14 17:44:06

标签: xml xslt mapping document

我遇到内联结构问题并在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>

这很有效,但是涉及第三方软件 - 它不喜欢&#34;文件(&#39;&#39;)&#34;功能 - 我正在寻找另一种可能性/替代方案。

如果需要其他信息,我很乐意给予。 提前谢谢!

1 个答案:

答案 0 :(得分:0)

假设您可以访问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)"/>

然后您可以使用<xsl:value-of select="$mappings-ns/map:mappings/mapping[@name=$var]/@doi"/>

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

<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>