2013-07-23 126 views
0

我想使用msxsl:node-set()函數將節點從存儲在變量中的節點集中取出,但我沒有收到任何東西。我的XML看起來是這樣的:msxsl:node-set()not recognized

<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稱他們爲:節點集()函數。但是這不會返回任何東西。 XSLT看起來是這樣的:

<?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()函數未定義。任何幫助,將不勝感激。我錯過了什麼?

回答

1
<?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爲結果樹片段(也稱爲RTF)轉換成節點組,其中不需要在你的情況。

xsl:value-of用於創建文本節點,因此不要用它來選擇要進一步查詢/處理的輸入樹的節點。

+0

這很好。謝謝!我沒有意識到xsl:value-of不能以這種方式使用。 – DevNoob