我遇到内联结构问题并在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;功能 - 我正在寻找另一种可能性/替代方案。
如果需要其他信息,我很乐意给予。 提前谢谢!
答案 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>