我一直在努力想出一个像样的解决方案,但我什至找不到一个不雅的。
我有一个看起来有点像这样的 XML 文件:
<Root>
<Something>
<SomethingElse>Value of SomethingElse</SomethingElse>
</Something>
...
<Map>
<Node>
<Path>/Root/Something/SomethingElse</Path>
</Node>
<Map>
...
</Root>
我想做的是编写一个采用 <Path>
的 XSL 转换。元素并使用其 text()
值作为 XPath 查询以将转换应用于 <SomethingElse>
元素,导致类似于例如:
<text>Value of SomethingElse</text>
我首先想到的是:
<xsl:template match="Path">
<text><xsl:value-of select="{text()}"/></text>
</xsl:template>
但这当然不能像select
那样工作不是值属性。
我不知道该怎么做。 Google 搜索只返回有关如何使用 XPath 获取文本值的结果,而不是相反的结果。
我还想对返回的 <SomethingElse>
应用进一步的转换元素,但一旦我弄清楚如何做到这一点,那应该是小菜一碟。
非常感谢你们走到这一步,
斯兰皮斯科
最佳答案
对于纯 XSLT 1.0 甚至 2.0,您需要使用两个样式表,第一个获取输入并使用您要使用的 XPath 表达式创建第二个样式表作为其结果,然后针对原始输入运行第二个样式表。
或者您需要检查您的 XSLT 处理器是否支持将字符串作为路径表达式求值的扩展函数,就像 Saxon 的 http://www.saxonica.com/documentation/extensions/functions/evaluate.xml或者像 AltovaXML 的 altova:evaluate 函数一样 http://manual.altova.com/AltovaXML/altovaxmlcommunity/index.html?xextaltova_general.htm .
关于xml - XSLT——将文本节点的值解释为 XPath 查询(并在转换中使用它),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7321553/