使用类似于答案found in this question的东西,我组合了一个基于off的函数,以创建一个XML结果树片段,并将其加载到一个变量中。
我能够将这个XML转换成
<Summary> <Summary>
<Category>
<Category>Tuition and Fees</Category>
<TotalDebits>0.00</TotalDebits>
<TotalCredits>-3509.45</TotalCredits>
</Category>
<Category>
<Category>Miscellaneous</Category>
<TotalDebits>60.62</TotalDebits>
<TotalCredits>-234.36</TotalCredits>
</Category>
</Summary>
</Summary>到这个
<Summary>
<Category>
<Category>Tuition and Fees</Category>
<TotalDebits>0.00</TotalDebits>
<TotalCredits>-3509.45</TotalCredits>
</Category>
<Category>
<Category>Miscellaneous</Category>
<TotalDebits>60.62</TotalDebits>
<TotalCredits>-234.36</TotalCredits>
</Category>
</Summary>它包含在这个变量中
<xsl:variable name="SummaryItems">
<xsl:call-template name="TheGreatUnescape">
<xsl:with-param name="escaped" select="string(//Summary)" />
</xsl:call-template>
</xsl:variable>现在我的问题是,我试图使用exslt:node-set()来访问这个变量中的节点,但是我没有得到任何信息。
使用像这样的函数时
<xsl:for-each select="exslt:node-set($SummaryItems)/Summary/Category">它不会产生任何结果。
我确实在xsl:stylesheet中包含了xmlns:exslt="http://exslt.org/common"声明,并且我测试了node-set函数,所以我知道它只是不能在变量中使用转换后的XML。
我是否使用exslt:node-set可以访问的代码创建了真正的结果树片段?
发布于 2013-01-19 05:17:34
不匹配的最常见原因是它们不在您期望的名称空间中,这很难说,因为您没有展示完整的代码,而是分阶段工作
你说
<xsl:copy-of select="exslt:node-set($SummaryItems)"/>工作,所以试一试
<xsl:copy-of select="exslt:node-set($SummaryItems)/*"/>如果有效,请尝试
<xsl:copy-of select="exslt:node-set($SummaryItems)/Summary"/>如果这不起作用,那么Summary就不会选择<Summary>,因为100次中有99次是名称空间问题。
原始答案(已在问题中修正)
<xsl:for-each select="exslt:node-set($SummaryItems)\Summary\Category">应为XPath语法错误提供错误的路径分隔符
<xsl:for-each select="exslt:node-set($SummaryItems)/Summary/Category">发布于 2013-01-19 10:59:17
David Carlisle是对的,命名空间问题可能是导致不能按预期匹配的最常见原因。
节点集问题的第二个常见来源(至少,它经常发生在我身上)是暂时的混淆,不知道哪些节点由绑定到节点集的变量名表示。根据绑定的具体实现方式,细节会有所不同,但是从您所说的情况来看,$SummaryItems很可能绑定到一个包含两个Category元素(等等)的Summary元素--如果是这样,那么表达式exslt:node-set($SummaryItems)/Summary/Category将不会产生任何结果,因为$SummaryItems不包含Summary元素。您需要的Summary元素不是$SummaryItems中节点的子节点--它们是$SummaryItems中的节点。
在这种情况下,我会尝试exslt:node-set($SummaryItems)/Category。
在更一般的情况下,当我遇到这样的问题时,我会运行测试代码来找出我所处的位置:例如,name(exslt:node-set($SummaryItems)[1])返回什么?
https://stackoverflow.com/questions/14407511
复制相似问题