首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >msxsl:node()未识别

msxsl:node()未识别
EN

Stack Overflow用户
提问于 2013-07-23 19:16:12
回答 1查看 1.9K关注 0票数 0

我试图使用msxsl: node set ()函数将节点从存储在变量中的节点集中提取出来,但没有得到任何信息。我的xml如下所示:

代码语言:javascript
复制
<Root>
  <Items olditemnumber="100" newitemnumber="200">
    <Item ItemNumber="100" ItemAliasCode="1001" ItemCode="X" />
    <Item ItemNumber="100" ItemAliasCode="1002" ItemCode="X" />
    <Item ItemNumber="200" ItemAliasCode="2001" ItemCode="X" />
    <Item ItemNumber="200" ItemAliasCode="2003" ItemCode="X" />
    <Item ItemNumber="100" ItemAliasCode="1003" ItemCode="P" />
    <Item ItemNumber="100" ItemAliasCode="1004" ItemCode="P" />
    <Item ItemNumber="200" ItemAliasCode="2002" ItemCode="P" />
  </Items>
</Root>

在我的xslt中,我尝试用节点的子集填充一个变量,然后使用msxsl:node set()函数调用它们。然而,这并不返回任何东西。XSLT看起来如下所示:

代码语言:javascript
复制
<?xml version="1.0"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
                              xmlns:msxsl="urn:schemas-microsoft-com:xslt">
 <xsl:template match="//Root">
   <xsl:variable name="OldItemNumber" select="/Items/@olditemnumber"/>
   <xsl:variable name="NewItemNumber" select="/Items/@newitemnumber"/>
   <xsl:variable name="OldItems">
     <xsl:value-of select="//Item[@ItemNumber = $OldItemNumber]"/>
   </xsl:variable>
   <xsl:variable name="NewItems">
     <xsl:value-of select="//Item[@ItemNumber = $NewItemNumber]"/>
   </xsl:variable>
   <xsl:for-each select="msxsl:node-set($OldItems)/Item">
     ...work
   </xsl:for-each>
 </xsl:template>
</xsl:stylesheet>

XSLT跳过for-each循环,尽管我在观察中看到Xpath查询在分配变量时捕获了正确的节点。手表还告诉我,msxsl:node-set()函数是未定义的。任何帮助都将不胜感激。我遗漏了什么?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-07-23 19:21:05

代码语言:javascript
复制
<?xml version="1.0"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
                              xmlns:msxsl="urn:schemas-microsoft-com:xslt">
 <xsl:template match="//Root">
   <xsl:variable name="OldItemNumber" select="/Items/@olditemnumber"/>
   <xsl:variable name="NewItemNumber" select="/Items/@newitemnumber"/>
   <xsl:variable name="OldItems" select="//Item[@ItemNumber = $OldItemNumber]"/>
   <xsl:variable name="NewItems" select="//Item[@ItemNumber = $NewItemNumber]"/>
   <xsl:for-each select="$OldItems">
     ...work
   </xsl:for-each>
 </xsl:template>
</xsl:stylesheet>

msxsl:node-set用于转换结果树片段(a.k.a )。RTF)到节点集,这在您的情况下是不需要的。

xsl:value-of用于创建文本节点,所以不要使用它来选择要进一步查询/处理的输入树的节点。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17819122

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档