XslTransform.Transform для создания нескольких выходных файлов - PullRequest
0 голосов
/ 17 июля 2009

Мне нужно создать несколько файлов отчетов HTML из файла данных XML, и я использую C # (.NET 3.5). По сути, мне нужен отчет HTML для каждого из определенных дочерних деревьев в файле XML (но они должны включать некоторую родительскую информацию).

Я решил использовать XSLT, потому что это, кажется, самое элегантное решение моей проблемы. Затем я могу использовать метод .NET XslTransform.Transform для создания моих файлов HTML ... или я могу?

Из чтения в MSDN кажется, что даже в .NET 3.5 XslTransform поддерживает только XSLT 1.0, хотя 2.0 уже давно существует. Вывод нескольких документов из одного файла XSLT стал возможен только в XSLT 2.0.

Есть ли какое-нибудь решение моей проблемы, о котором вы можете подумать?

Ответы [ 3 ]

1 голос
/ 17 июля 2009

Я бы предложил использовать AltovaXML для решения этой проблемы, то есть, если вам разрешено использовать внешние библиотеки классов. Лично мне нечего сказать, кроме хорошего. Что касается кода для создания нескольких документов в качестве вывода, ваш XSLT-файл должен выглядеть примерно так:

<xsl:template match="/">
<xsl:for-each select="Item">        
<xsl:variable name="filename" select="concat($solutionRoot,'\',$v1,'\',$v2,'.html')" />
<xsl:value-of select="$filename"/>
<xsl:result-document href="{$filename}" format="html-format">

   --Place document construction code here--

</xsl:result-document>
</xsl:for-each>
</xsl:template>

По сути, превращайте имя файла в переменную, создавая новое имя файла с каждым разделом данных.

0 голосов
/ 17 июля 2009

Saxon (версия .net) является золотым стандартом для реализаций XSLT 2. Это не только эталонная реализация стандарта XSLT 2.0, но и высокооптимизированная с открытым исходным кодом, выполняемая как управляемый код (через библиотеки IKVM) и поддерживающая обычные интерфейсы .net.

Вы можете без проблем использовать элемент <xsl:result-document>.

0 голосов
/ 17 июля 2009

Да. Пусть ваш XSLT создаст один документ с "n" элементами под корнем. Сделайте ваш код постобработанным, чтобы получить "n" документов.

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