2011-07-02 73 views
2

我有這樣的xsl:無法通過.NET System.Xml.Xsl.XslCompiledTransform將XML轉換爲HTML

<?xml version="1.0" encoding="utf-8"?> 
<xsl:stylesheet version="1.0" 
       xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 
       xmlns:cf="http://AAA" 
       xmlns="http://AAA" 
       exclude-result-prefixes="cf"> 

    <xsl:output method="xml" indent="yes"/> 

    <xsl:template match="/cf:Content"> 
    <html> 
     <head> 
     <title>AAA</title> 
     </head> 
     <body> 
     Hello everybody 
     </body> 
    </html> 
    </xsl:template> 

</xsl:stylesheet> 

此xml:

<?xml version="1.0" encoding="utf-8" ?> 
<?xml-stylesheet href="myxsl.xslt" type="text/xsl"?> 
<cf:Content xmlns:cf="http://AAA" 
      xmlns="http://AAA"> 

    Hello. 

</cf:Content> 

通過XML引用的命名空間的XSD我的(驗證是正確的)。

嗯,是我打開XML文件瀏覽器中,XSLT作品。

現在,我有這樣的代碼:

string xml = "THE SAME XML OF THE XML FILE"; 

XslCompiledTransform transform = new XslCompiledTransform(); 
using (XmlReader xr = 
     XmlReader.Create("myxsl.xslt")) { 
    transform.Load(xr); 
} 

try { 
    using (StringWriter sw = new StringWriter()) 
    using (StringReader sr = new StringReader(xml)) 
    using (XmlReader xr = XmlReader.Create(sr)) { 

     transform.Transform(xr, new XsltArgumentList(), sw); 
     string html = sw.ToString(); 
     this.Preview_Literal.Text = html; 

    } 
} catch (Exception ex) { 
throw ex; 
} 

當然它會得到一個異常:

Error: Data at the root level is invalid. Line 1, position 1. - Type: System.Xml.XmlException

問題是什麼?

+2

請問如果刪除了'<?xml樣式表...'行工作? –

+0

哪個陳述確實給你例外? –

+0

一些評論:如果你想讓你的樣式表創建HTML輸出,那麼使用''而不是method =「xml」是正確的方法。如果你想創建HTML元素然後刪除'的xmlns =「HTTP:// AAA」'從'的xsl:stylesheet'爲HTML元素沒有在該命名空間的歸屬。這些都不能解釋你得到的錯誤,但我懷疑這不是由XSLT引起的,而是當輸入標記被解析爲XML時發生。你可以發佈堆棧跟蹤嗎? 「xml」變量在哪裏/如何填充? –

回答

1

馬丁的回答是:

刪除默認的命名空間,xmlns="http://AAA",從xsl:stylesheet爲HTML元素沒有在該命名空間的歸屬。例如,<head>實際上<cf:head>是默認。

+0

問題:如果馬丁已經回答了,那麼爲什麼你又回答了? –

+1

@John,因爲我在「未回答」部分找到了問題。既然它有答案,而且答案很好,我想它應該是「回答」。而已。 – OmegaZiv

+0

爲什麼不讓馬丁回答這個問題? –