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

本文关键字:XML XslCompiledTransform 转换 HTML Xsl NET System | 更新日期: 2023-09-27 18:00:51

我有这个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

问题出在哪里?

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

Martin的答案:

xsl:stylesheet中删除默认名称空间xmlns="http://AAA",因为HTML元素不属于该名称空间。例如,默认情况下,<head>实际上是<cf:head>