|
|
|
Forum Guru
      
участник
Last Login: 19.04.2004 11:54
Сообщ.: 61,
Visits: 672
|
|
Есть xml-файл и соответствующий ему xsl-файл. Необходимо средствами С# получить в строковую переменную результат сведения xml- и xsl-файлов. На VBScript этого можно добиться методом transformNode объекта MSXML.DOMDocument :
sHTML = docXML.transformNode( docXSL )
Как того же добиться на C#?
Пробовал использовать объкт XslTransformation таким образом:
XmlDocument doc = new XmlDocument();
string xmlFile = Server.MapPath( "1.xml" );
doc.Load( xmlFile);
XslTransform xslt = new XslTransform();
string xslFile = Server.MapPath( "1.xsl" );
xslt.Load( xslFile );
DocumentNavigator nav = new DocumentNavigator(doc);
XmlReader xmlReader = xslt.Transform( nav, null );
Response.Write( Server.HtmlEncode( xmlReader.ReadInnerXml() );
... но неизменно получаю пустую строку. Если же использую метод Transform с другой сигнатурой
а именно:
public void Transform( XmlNavigator input, NSParamList args, TextWriter output );
то всё в порядке, но чтобы присвоить получающийся html-код строковой переменной приходится предварительно сохранить результат в файл, что совсем даже не нужно!
Что я не так делаю в первом случае?
|
|
|
|
|
новичок
      
участник
Last Login: 03.12.2002 6:34
Сообщ.: 4,
Visits: 45
|
|
using System.Xml; using System.Xml.Xsl; using System.Xml.XPath; using System.IO; using System;
namespace Foo{ class Bar { static void Main() {
XmlDocument d = new XmlDocument(); d.Load( "example.xml"); XslTransform t = new XslTransform(); t.Load( "example.xsl" ); XPathNavigator v = d.DocumentElement.CreateNavigator(); MemoryStream s = new MemoryStream(); s.Flush(); t.Transform(v, null, s); if (s.CanRead){ try { s.Seek(0, SeekOrigin.Begin);} catch( Exception e){Console.Write(e.ToString());} string z = ""; int i; for (i = 0; (i = s.ReadByte() )!= -1; i++){ z += (char )i; } Console.WriteLine("{0}", z); }
} } }
|
|
|
|