2013-10-09 6 views
0

Я использую XDocument для создания xml-файла, который использует файл xsl как таблицу стилей. Я хочу сделать загружаемый xml, с которым у меня нет проблем, но проблема заключается в том, что у меня есть два файла, когда мне нужна только одна загрузка файла.Возможно интегрировать xsl в xml

Я использую следующие включить ссылку:

doc.AddFirst(new XProcessingInstruction("xml-stylesheet", "type='text/xsl' href='Stylesheet.XSL'")); 

Можно ли объединить файл XSL в объект XDocument?

EDIT: Найдено я могу это сделать:

XDocument transformedDoc = new XDocument(); 
     using (XmlWriter writer = transformedDoc.CreateWriter()) 
     { 
      XslCompiledTransform transform = new XslCompiledTransform(); 
      transform.Load(XmlReader.Create(new StringReader(HttpContext.Current.Server.MapPath("~/XML/CareLog.xsl")))); 
      transform.Transform(doc.CreateReader(), writer); 
     } 
     transformedDoc.Save(HttpContext.Current.Server.MapPath("~/BrowserTemp/CareLog.xml")); 

Но я получаю сообщение об ошибке «данные на уровне корневой недействителен» на линии transform.Load()? Все, что мне нужно посмотреть?

+0

Я не думаю, что это так, сам по себе XML не имеет никакой логики обработки поэтому мы используем XSL для трансформации модели XML. –

+0

Как насчет использования PDFSharp или MigraDoc, чтобы как-то открыть xml со ссылкой и создать pdf? – user1166905

+0

Извините, я считаю, что я не понял это правильно, когда вы сказали 2 файла - это xsl и xml? –

ответ

0

Прямо из стандартного ... простого примера, но встраивает таблицу стилей внутри XML: http://www.w3.org/TR/xslt#section-Embedding-Stylesheets

<?xml-stylesheet type="text/xml" href="#style1"?> 
<doc> 
<head> 
<xsl:stylesheet id="style1" 
      version="1.0" 
      xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 
      xmlns:fo="http://www.w3.org/1999/XSL/Format"> 
<xsl:template match="id('foo')"> 
<fo:block font-weight="bold"><xsl:apply-templates/></fo:block> 
</xsl:template> 
<xsl:template match="xsl:stylesheet"> 
<!-- ignore --> 
</xsl:template> 
</xsl:stylesheet> 
</head> 
<body> 
<para id="foo"> 
... 
</para> 
</body> 
</doc>