2011-07-02 19 views
2

.NET System.Xml.Xsl.XslCompiledTransformを通じてXMLをHTMLに変換することができません:は、私がこのXSLを持って

<?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は動作します。

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

問題はどのようなものです:それは例外を取得もちろん

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; 
} 

は今、私はこのコードを持っていますか?

+2

'<?xml-stylesheet ...'行を削除すると動作しますか? –

+0

どのステートメントから例外が発生しますか? –

+0

いくつかのコメント:スタイルシートにHTML出力を作成させたい場合は、method = "xml"の代わりに ''を使うのが正しいアプローチです。 HTML要素を作成する場合は、HTML要素がその名前空間に属さないため、 'xsl:stylesheet'から' xmlns = "http:// AAA"を削除します。それはどれもエラーを説明するものではありませんが、XSLTが原因ではないと思われます。入力マークアップがXMLとして解析されたときのことです。スタックトレースを投稿できますか? 'xml'変数にはどのような場所がありますか? –

答えて

1

マーティンの答え:HTML要素は、その名前空間に属していないよう

xsl:stylesheetから、デフォルトの名前空間、xmlns="http://AAA"を削除します。たとえば、デフォルトでは<head>は実際には<cf:head>です。

+0

質問:もしマーティンがすでにそれに答えていれば、なぜあなたはそれに再び答えましたか? –

+1

@ジョン、私は "未回答"セクションで質問を見つけたので、それは答えがあり、良いものがあったので、私はそれが "答えられるべき"と考えました。これ以上何もない。 – OmegaZiv

+0

なぜ、マーティンがその質問に答えることができないのですか? –

関連する問題