Помощь в объединении альтернативных строк из двух файлов XML и отображении их в виде одной таблицы HTML - PullRequest
0 голосов
/ 15 ноября 2009

У меня есть 2 XML-файла, и я хотел бы отобразить их в одной HTML-таблице, содержащей чередующиеся строки из каждого файла. Я знаю о подходе, использующем XSLT, может кто-нибудь подсказать мне, как это можно сделать?

Ответы [ 3 ]

1 голос
/ 16 ноября 2009

Кариллонатор дал вам первую часть, но часть «поднять логику xsl для чередования двух входов» не очевидна. Вам нужно сделать что-то вроде этого:

<xsl:template match="/">
   <xsl:variable name="file1" select="//foo"/>
   <xsl:variable name="file2" select="document('c:\temp\myfile.xml')//foo"/>
   <output>
      <xsl:for-each select="$file1">
         <xsl:variable name="pos" select="position()"/>
         <xsl:apply-templates select="."/>
         <xsl:apply-templates select="$file2[position() = $pos]/>
      </xsl:for-each>
      <xsl:apply-templates select="$file2[position() &gt; count($file1)"/>
   </output>
</xsl:template>

Это чередует преобразование элементов foo в исходном документе и элементов foo во втором файле. Если в исходном документе больше foo элементов, цикл for-each будет выводить их все; если во втором файле их больше, последняя строка вне цикла for-each гарантирует, что они получат вывод.

Если вы хотите, чтобы вывод прекратил копирование, когда закончится один из списков, измените select в цикле for-each на $file1[not(position() &gt; count($file2))] и пропустите строку apply-templates вне цикла for-each.

0 голосов
/ 15 ноября 2009

XSLT допускает только один XML-документ в качестве стандартного ввода, но вы можете использовать функцию document() для вызова другого.

<xsl:apply-templates select="document('file2.xml')/foo" />

затем просто взбейте немного логики xsl для чередования двух входов

0 голосов
/ 15 ноября 2009

Я не уверен, что вам действительно нужен xslt для этого.

Вы можете создать два метода, каждый из которых будет анализировать разные XML-файлы с помощью программы чтения. Убедитесь, что вы используете Выход , чтобы получить каждый ряд.

Затем в методе, который вы можете вызвать CombineXml (), используйте цикл для вызова каждого метода в цикле. Таким образом, вы получите строку из каждого XML-файла и затем сможете объединить.

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

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