Нужна помощь в преобразовании XSL-преобразования из XML в HTML в ASP.NET MVC - PullRequest
0 голосов
/ 11 августа 2010

Я только что узнал о XSL и XSLT несколько дней назад, и теперь я пытаюсь заставить его работать, основываясь на вопросе , который у меня был ранее сегодня (хочу, чтобы форматированный XML отображался на моем сайте).

Вот код, который я пытаюсь (в представлении):

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 ]

1 голос
/ 11 августа 2010

Я получил приведенный выше код, просмотрев этот сайт

Код, который я использовал в итоге (который был скопирован по ссылке выше с некоторыми изменениями для моей конкретной ситуации) был:

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()); 

Надеюсь, это кому-нибудь поможет!:)

0 голосов
/ 11 августа 2010

Просто предположение, но действительный HTML не обязательно является допустимым XML, и вы используете класс с именем XmlWriter. Не видя вашего XSL и входного XML, довольно сложно понять, что происходит. Я подозреваю, что ваш выходной документ не является правильно сформированным XML.

Я думаю, вам нужно предоставить другую реализацию Writer, которая может работать с выводом HTML.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...