gpt4 book ai didi

XSLT:XPath 上下文和文档()

转载 作者:行者123 更新时间:2023-12-03 15:48:14 25 4
gpt4 key购买 nike

我有一个像这样的 XSLT:

<?xml version="1.0" encoding="UTF-8"?>
<xsl:transform version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:xalan="http://xml.apache.org/xalan">

<xsl:variable name="fooDocument" select="document('fooDocument.xml')"/>

<xsl:template match="/">
<xsl:apply-templates select="$fooDocument//*"/>
</xsl:template>

<xsl:template match="nodeInFooDocument">
<xsl:variable name="valueFromSource" select="//someSourceElement"/>
</xsl:template>
</xsl:transform>

在第二个模板中,它与加载了 document()fooDocument.xml 中的节点相匹配,我想访问 XML 源中的节点,转换是执行于。这不适用于 //someSourceElement,因为显然,XPath 在 fooDocument 的上下文中执行此路径。

我想到的第一个解决方法是:

...
<!-- global variable -->
<xsl:variable name="root" select="/"/>

...
<!-- in the template -->
<xsl:variable name="valueFromSource" select="$root//someSourceElement"/>

...

但我不能使用这个解决方法,因为实际上,我的变量是这样选择的:

<xsl:variable name="valueFromSource" select="xalan:evaluate($someXPathString)"/>

$someXPathString 不是在 XSLT 文件中制作的,而是从 fooDocument 加载的(并且包含与上面使用的一样的绝对路径)。尽管如此,我仍需要以某种方式将 XPath 上下文更改回 XML 源。我发现的一个非常 hacky 解决方法是:

<xsl:for-each select="$root[1]">
<xsl:variable name="valueFromSource" select="xalan:evaluate($someXPathString)"/>
</xsl:for-each>

(无用的)for-each 循环将上下文更改回主要 XML 源,因此 XPath 计算正确。但显然,这不是一个可以接受的解决方案。

有没有办法正确做到这一点,或者有人可以建议更好的解决方法?

最佳答案

即使您认为使用 for-each select="$root" 更改上下文文档的尝试是 Not Acceptable ,这也是正确的方法。就用那个吧,没有别的办法。

关于XSLT:XPath 上下文和文档(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8533314/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com