我尝试用这种方式在其他文档上选择一个值,但它不起作用。我没有正确的道路。有什么问题吗?
<xsl:template match="//element[@type='champ']/propriete[2]/text()">
<xsl:variable name="chemin_data" select="." />
<xsl:value-of select="document('data_rapport.xml')/$chemin_data"/>
</xsl:template>
data_rapport.xml
<data>
<client>value </client>
<renseignement>
<projet> value </projet>
<utilisateur> value <utilisateur>
</renseignement>
</data>
$chemin_data
包含类似“data/client
”的路径
对于每一个champ/propriete[2]
,我都会尝试获得良好的值(value)。
最佳答案
使用动态 XPath 需要 EXSLT - 动态 http://www.exslt.org/dyn/functions/evaluate/
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:dyn="http://exslt.org/dynamic"
extension-element-prefixes="dyn">
<xsl:template match="/">
<xsl:variable name="chemin_data" select="'data/client'" />
<xsl:variable name="data_rapport" select="document('data_rapport.xml')" />
<xsl:value-of select="dyn:evaluate(concat('$data_rapport', '/', $chemin_data))"/>
</xsl:template>
</xsl:stylesheet>
此解决方案需要记住以下几点:
- 它需要您的 XSLT 处理器支持 EXSLT - 动态(请参阅文档)
- 您的动态 xpath 必须写为字符串 - 否则您已经创建了一个节点集
- 由于创建动态 XPath 需要字符串连接,因此我在文档中使用了另一个变量
- 当然:您应该尽可能避免这种情况,因为它相当脆弱并且会降低性能,因此仅在确实必要时才使用它
关于variables - 如何使用变量选择路径?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24055764/