无法通过.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
问题出在哪里?
Martin的答案:
从xsl:stylesheet
中删除默认名称空间xmlns="http://AAA"
,因为HTML元素不属于该名称空间。例如,默认情况下,<head>
实际上是<cf:head>
。