我有2个XML文件,我想在一个HTML表中显示它们,每个文件都有备用行。我知道使用XSLT的方法,有人可以指导我如何做到这一点吗?
答案 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() > count($file1)"/>
</output>
</xsl:template>
这将交替转换源文档中的foo
元素和第二个文件中的foo
元素。如果源文档中有更多foo
个元素,则for-each循环将全部输出;如果第二个文件中有更多,则for-each循环外的最后一行确保它们得到输出。
如果您希望输出在其中一个列表用完后停止复制,请将for-each循环中的select
更改为$file1[not(position() > 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逻辑掀起来在两个输入之间交替