我刚刚在几天前了解了XSL和XSLT,现在我正在尝试基于我今天早些时候的question开始工作(想要在我的网站上显示格式化的XML)。 / p>
这是我正在尝试的代码(在视图中):
XDocument xmlInput = XDocument.Parse(item.Action);
XDocument htmlOutput = new XDocument();
using (System.Xml.XmlWriter writer = xmlInput.CreateWriter())
{
// Load Transform
System.Xml.Xsl.XslCompiledTransform toHtml = new System.Xml.Xsl.XslCompiledTransform();
string path = HttpContext.Current.Server.MapPath("~/App_Data/xmlverbatimwrapper.xsl");
toHtml.Load(path);
// Execute
toHtml.Transform(xmlInput.CreateReader(), writer);
}
Response.Write(htmlOutput.ToString());
它给了我这个错误:
[InvalidOperationException: This operation would create an incorrectly structured document.]
不确定它是否沿着正确的路线,但我已经尝试修改编写器设置,因此它可以生成碎片的xml文件而没有运气(因为它是只读的)。任何想法让这个工作?也许我会采取完全错误的做法? :)
感谢您的帮助!
答案 0 :(得分:1)
我通过查看this site
获得了上述代码我最终使用的代码(从上面的链接中复制,但针对我的具体情况进行了一些更改)是:
String TransactionXML = item.Action;
System.Xml.XmlDocument xmlDoc = new System.Xml.XmlDocument();
System.IO.Stream xmlStream;
System.Xml.Xsl.XslCompiledTransform xsl = new System.Xml.Xsl.XslCompiledTransform();
ASCIIEncoding enc = new ASCIIEncoding();
System.IO.StringWriter writer = new System.IO.StringWriter();
// Get Xsl and XML
xsl.Load(HttpContext.Current.Server.MapPath("~/App_Data/xmlverbatimwrapper.xsl"));
xmlDoc.LoadXml(TransactionXML);
// Get the bytes
xmlStream = new System.IO.MemoryStream(enc.GetBytes(xmlDoc.OuterXml), true);
// Load Xpath document
System.Xml.XPath.XPathDocument xp = new System.Xml.XPath.XPathDocument(xmlStream);
// Perform Transform
xsl.Transform(xp, null, writer);
// output
Response.Write(writer.ToString());
希望这有助于某人! :)
答案 1 :(得分:0)
只是一个猜测,但有效的HTML不一定是有效的XML,而且你正在使用一个名为XmlWriter的类。如果没有看到你的XSL和输入XML,就很难弄清楚会发生什么。我怀疑你的输出文档不是格式良好的XML。
我猜你需要提供一个可以处理HTML输出的不同Writer实现。