查询msxsl:node-set的结果不起作用

时间:2017-01-03 13:45:14

标签: xml xslt

我使用node-set内置函数将xsl变量转换为节点集,如下面的代码所示

<xsl:variable name="allotmentValuesNodeSet" select="msxsl:node-set($allotmentValues)"/>

命令<xsl:copy-of select="$allotmentValuesNodeSet"/>产生以下输出:

<values>  
        <month>Mar</month>
        <incomeQTD>1499.63109246680</incomeQTD>
        <realizedQTD />
        <incomeYTD>1519.35773710483</incomeYTD>
        <realizedYTD />
        <incomePrevYTD>1519.35773710483</incomePrevYTD>
        <realizedPrevYTD />

        <month />
        <incomeQTD />
        <realizedQTD />
        <incomeYTD />
        <realizedYTD />
        <incomePrevYTD />
        <realizedPrevYTD />

 </values>

当我尝试使用此xsl命令<xsl:value-of select="count($allotmentValuesNodeSet/values/month)"/>查询节点集变量时,我总是得到0,但结果应为2

allotmentValues变量包含在其他外部xml节点之间。如果我没有在任何xml节点之间包含它,那么代码将按预期工作。

为什么查询xsl节点集可能会中断,是否有任何明显的casue(例如可能与命名空间相关?)?

如果需要,我会尝试提出一个简单的例子来说明我的问题(由于它是专有代码,我无法准确发布问题的代码片段。)

2 个答案:

答案 0 :(得分:1)

使用例如修复变量创建<xsl:variable name="allotmentValues" xmlns="">...</xsl:variable>可能是未加前缀的路径<xsl:value-of select="count($allotmentValuesNodeSet/values/month)"/>

答案 1 :(得分:0)

我发现此question的解决方案可以解决我的问题。

问题和解决方案的简要说明:

  • 如果我们派生节点集的<xsl:variable/>包含在具有默认命名空间的xml块中,则它继承该命名空间
  • 因此,为了正确地执行XPath查询,可以在节点前面加上默认命名空间的名称,例如: count($allotmentValuesNodeSet/inheritedNS:values/inheritedNSmonth)代替count($allotmentValuesNodeSet/values/month)