2014-06-09 36 views
0

嗨腳本C#XML片段我有以下的樣式表MSXML:與XslCompiledTransform

<xsl:template match="/"> 
<xsl:variable name="objGen"> 
    <xsl:value-of select="cuser:selListNodes('C:\Sitiosweb\Test\xsl\solimporta14.xml')" /> 
</xsl:variable> 
<xsl:if test="cuser:getNodesLength($objGen)!='0'"> 
    <xsl:for-each select="$objGen"> 
    <xsl:sort data-type="number" order="descending" select="substring(EL01,4,4)" /><xsl:value-of select="user:IncCount()" /> 
    <xsl:value-of disable-output-escaping="yes" select="EL01" /> 
    <xsl:value-of disable-output-escaping="yes" select="EL02" /> 
    <xsl:value-of disable-output-escaping="yes" select="EL03" /> 
    <xsl:value-of disable-output-escaping="yes" select="EL04" /> 
    <xsl:value-of disable-output-escaping="yes" select="EL05" /> 
    </xsl:for-each> 
</xsl:if> 

與下面的腳本在C#中

<msxml:script language="C#" implements-prefix="cuser"> 
<msxml:using namespace="System.IO" /> 

public bool CheckFileExist(string strPath){ 
    return File.Exists(strPath); 
} 

public int getNodesLength(XPathNodeIterator objNodes){ 
    if(objNodes.Count > 0){ return(objNodes.Count); }else{ return(0); } 
} 

public XPathNodeIterator selListNodes(string nsetCtxt){ 
    XPathNavigator nav; 
    XPathNodeIterator iterator; 
    XPathDocument objGenXml = new XPathDocument(nsetCtxt); 
    nav = objGenXml.CreateNavigator(); 
    XPathExpression xPathExpression = nav.Compile("//Listing/Elem"); 
    iterator = nav.Select(xPathExpression); 
    return(iterator); 
} 

的XML值是:

<Listing><Elem><EL01><![CDATA[SI-0001-14]]></EL01><EL04><![CDATA[35]]></EL04><EL02><![CDATA[351]]></EL02><EL03><![CDATA[1]]></EL03><EL04><![CDATA[35]]></EL04><EL05><![CDATA[21586]]></EL05><EL06><![CDATA[DALB, INC.]]></EL06><EL07><![CDATA[20140102]]></EL07><EL08><![CDATA[085225]]></EL08><EL09><![CDATA[]]></EL09><EL10><![CDATA[]]></EL10><EL11><![CDATA[]]></EL11><EL12><![CDATA[]]></EL12><EL13><![CDATA[]]></EL13><EL14><![CDATA[]]></EL14><EL15><![CDATA[]]></EL15></Elem><Elem><EL01><![CDATA[SI-0002-14]]></EL01><EL04><![CDATA[35]]></EL04><EL02><![CDATA[1228]]></EL02><EL03><![CDATA[1]]></EL03><EL04><![CDATA[35]]></EL04><EL05><![CDATA[22657]]></EL05><EL06><![CDATA[THE COCA COLA COMPANY]]></EL06><EL07><![CDATA[20140103]]></EL07><EL08><![CDATA[160102]]></EL08><EL09><![CDATA[]]></EL09><EL10><![CDATA[]]></EL10><EL11><![CDATA[]]></EL11><EL12><![CDATA[]]></EL12><EL13><![CDATA[]]></EL13><EL14><![CDATA[]]></EL14><EL15><![CDATA[]]></EL15></Elem></Listing> 

但是當執行轉換這個返回錯誤:

To use a result tree fragment in a path expression, first convert it to a set of nodes using msxsl: node-set(). 

我的問題是有沒有與XslCompiledTransform類XML樹的任何限制?或者在使用XPathNodeIterator時是否有錯誤?

在此先感謝。

回答

0

您可以簡單地使用XSLT document函數來加載和解析XML文檔,不需要使用C#。 至於錯誤,如果你真的認爲你需要使用C#,那麼定義變量爲<xsl:variable name="objGen" select="cuser:selListNodes(...)"/>。並檢查計數,你可以簡單地使用XPath count($objGen)

+0

事實上,當我使用以下形式: '的 ' 如果使用'',則獲取數據。 我正在使用C#函數,因爲根據用戶選擇的內容,根據其他變量加載不同的文件以顯示不同的數據。 感謝您的回答我澄清這一點,因爲我可以使這項工作。 – nitwh