【发布时间】:2011-07-02 10:22:39
【问题描述】:
我有这个 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
有什么问题?
【问题讨论】:
-
去掉
<?xml-stylesheet ...行还能用吗? -
哪条语句给了你例外?
-
一些 cmets:如果您希望您的样式表创建 HTML 输出,那么使用
<xsl:output method="html" .../>而不是 method="xml" 是正确的方法。如果您想创建 HTML 元素,请从xsl:stylesheet中删除xmlns="http://AAA",因为 HTML 元素不属于该命名空间。这些都不能解释你得到的错误,但我怀疑这根本不是由 XSLT 引起的,而只是在输入标记被解析为 XML 时发生。您可以发布堆栈跟踪吗?xml变量在哪里/如何填充? -
@Martin:你说得对,删除命名空间是正确的选择,现在可以了。谢谢你 :) 把它作为你的答案,我会检查它作为这个问题的答案 :) 再次感谢
-
@martin:也许你想回答?