需要帮助在ASP.NET MVC中执行从XML到HTML的XSL转换

时间:2010-08-10 21:16:27

标签: html xml asp.net-mvc-2 xslt

我刚刚在几天前了解了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文件而没有运气(因为它是只读的)。任何想法让这个工作?也许我会采取完全错误的做法? :)

感谢您的帮助!

2 个答案:

答案 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实现。