2014-09-30 34 views
0

在XslCompiledTransform中加載xslt時,我將對象引用設置爲未設置爲對象的實例。XslCompiledTransform.Load引發未將對象引用設置爲對象的實例

我拿來從數據庫以下XSLT: -

<xsl:stylesheet version=\"1.0\" xmlns:xsl=\"http://www.w3.org/1999/XSL/Transform\"> 
<xsl:template match=\"/\"> 
    <html> 
     <body> 
     <h2>My CD Collection</h2> 
     <table border=\"1\"> 
      <tr bgcolor=\"#9acd32\"> 
       <th style=\"text-align:left\">Title</th> 
       <th style=\"text-align:left\">Artist</th> 
      </tr> 
      <xsl:for-each select=\"catalog/cd\"> 
      <tr> 
       <td> 
        <xsl:value-of select=\"title\"/> 
       </td> 
       <td> 
        <xsl:value-of select=\"artist\"/> 
       </td> 
      </tr> 
      </xsl:for-each> 
     </table> 
     </body> 
    </html> 
</xsl:template> 
</xsl:stylesheet> 

和下面的XML從數據庫: -

<?xml version="1.0" encoding="UTF-8"?> 
<catalog> 
    <cd> 
     <title>Empire Burlesque</title> 
     <artist>Bob Dylan</artist> 
     <country>USA</country> 
     <company>Columbia</company> 
     <price>10.90</price> 
     <year>1985</year> 
    </cd> 
</catalog> 

使用下面的代碼轉換XSLT: -

public static string XsltTransform(string xmlContent, string xsltContent) 
{ 
    string result = string.Empty; 
    XmlTextReader xtr = new XmlTextReader(new StringReader(xsltContent)); 
    xsltCompiled.Load(xtr); 

    using (StringReader srXml = new StringReader(xmlContent)) 
    { 
     using (XmlReader xrXml = XmlReader.Create(srXml)) 
     { 
      using (StringWriter sw = new StringWriter()) 
      { 

       xsltCompiled.Transform(xrXml, null, sw); 

       result = sw.ToString(); 
      } 
     } 
    } 
    return result; 
} 

但它會在行中引發錯誤「Object reference not set to an instance of an object」: -

xsltCompiled.Load(xtr); 

有什麼建議嗎?

更新: 只是爲了增加更多的我得到這個創建的XmlTextReader後: -

enter image description here

回答

1

您必須刪除轉義字符。

檢查:Remove the escape sequence '\' from string to convert it to XmlDocument

XsltTransform(xmlContent, xsltContent.Replace("\\\"", "\"")); 

編輯:(XML,XSLT從文件中讀取)

static void Main(string[] args) 
    { 
     string xmlContent = File.ReadAllText("D:/test/data.xml"); 
     string xsltContent = File.ReadAllText("D:/test/style.xslt"); 

     string result = XsltTransform(xmlContent, xsltContent.Replace("\\\"", "\"")); 
    } 

    static readonly XslCompiledTransform XsltCompiled = new XslCompiledTransform(); 

    public static string XsltTransform(string xmlContent, string xsltContent) 
    { 
     string result = string.Empty; 
     XmlTextReader xtr = new XmlTextReader(new StringReader(xsltContent)); 
     XsltCompiled.Load(xtr); 

     using (StringReader srXml = new StringReader(xmlContent)) 
     { 
      using (XmlReader xrXml = XmlReader.Create(srXml)) 
      { 
       using (StringWriter sw = new StringWriter()) 
       { 

        XsltCompiled.Transform(xrXml, null, sw); 

        result = sw.ToString(); 
       } 
      } 
     } 
     return result; 
    } 
+0

嘗試過,但沒有幫助.....仍然得到同樣的錯誤 – 2014-09-30 10:46:09

+0

檢查編輯答案,它工作正常。我正在通過同樣的方式從文件中讀取內容。 – 2014-09-30 11:10:01

+0

感謝它的工作....! – 2014-10-01 06:15:43

相關問題