Можно ли передать поток XML в качестве параметра в XSLT? - PullRequest
1 голос
/ 11 марта 2011

У меня следующая проблема: при преобразовании (которое полностью выполняется в памяти) должен быть получен дополнительный параметр XSLT, содержащий другой поток XML. Это как объединение двух XML-документов в памяти. Записать его на диск и динамически загрузить невозможно.

Для разработки использую .Net вместе с Visual Studio 2010.

Ответы [ 2 ]

1 голос
/ 11 марта 2011

Ну, какой язык программирования, какой процессор XSLT вы используете?Какие параметры принимает процессор XSLT, зависит от процессора, например, с помощью XNET-преобразователя .NET вы можете определить глобальный параметр в своем коде XSLT и затем использовать XsltArgumentList для передачи в IXPathNavigable (то есть XmlDocument или XPathDocument), созданного из вашего потока.

0 голосов
/ 15 марта 2011

Это возможно с .NET (я тестировал 4.0).Он работал со следующим кодом:

C #:

XslCompiledTransform proc = new XslCompiledTransform();
proc.Load(path + "test_parameter.xslt");

System.IO.TextWriter result = new StreamWriter(path + "result.html");

XmlDocument docA = new XmlDocument();
docA.Load(path + "documentA.xml");

XmlDocument docB = new XmlDocument();
docB.Load(path + "documentB.xml");

XsltArgumentList xsltArgs = new XsltArgumentList();
xsltArgs.AddParam("xmlDoc", "", docB);

proc.Transform(docA, xsltArgs, result);

XSLT:

<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">

  <!-- THIS FILE GENERATES A SIMPLE HTML  -->
  <xsl:output method="html" indent="yes"/>
  <xsl:param name="xmlDoc" />    

  <xsl:template match="/document">
     <xsl:apply-templates select="$xmlDoc/foo/bar"/>
  </xsl:template>
</xsl:stylesheet>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...