帮助组合2个XML文件的备用行并将其显示为一个HTML表

时间:2009-11-15 15:37:29

标签: xml xslt

我有2个XML文件,我想在一个HTML表中显示它们,每个文件都有备用行。我知道使用XSLT的方法,有人可以指导我如何做到这一点吗?

3 个答案:

答案 0 :(得分:1)

carillonator已经给出了第一部分,但是“掀起一些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循环外的最后一行确保它们得到输出。

如果您希望输出在其中一个列表用完后停止复制,请将for-each循环中的select更改为$file1[not(position() &gt; count($file2))],并省略apply-templates以外的{{1}}行。 for-each循环。

答案 1 :(得分:0)

我不确定你真的需要xslt来实现这个目标。

您可以创建两个方法,每个方法都使用阅读器解析不同的xml文件。确保使用Yield获取每一行。

然后在一个方法中你可以调用CombineXml(),使用循环来遍历循环中每个方法的调用。因此,您将从每个xml文件中获取一行,然后可以组合。

您还必须为不同的行和边界条件等添加逻辑。

答案 2 :(得分:0)

XSLT只允许一个XML文档作为标准输入,但您可以使用document()函数调用另一个。

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

然后只是将一些xsl逻辑掀起来在两个输入之间交替