无法通过.NET System.Xml.Xsl.XslCompiledTransform将XML转换为HTML

时间:2011-07-02 10:22:40

标签: c# .net xml xslt

我有这个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正常工作。

现在,我有这段代码:

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

当然它有例外:

  

错误:根级别的数据是   无效。第1行,第1位。 - 类型:   System.Xml.XmlException

有什么问题?

1 个答案:

答案 0 :(得分:1)

马丁的回答:

xmlns="http://AAA"中删除默认命名空间xsl:stylesheet,因为HTML元素不属于该命名空间。例如,<head>默认为<cf:head>