XSLT转换 - 多个输入XML文件

时间:2013-01-23 15:57:54

标签: xml xslt foreach merge concat

我遇到以下问题:我有几个输入XML文件,其中一个包含指向其他文件的链接。 那个看起来像这样:

<Envelope>
<Part File='file:SEQ014/DET3262874.9.0.xml' LinkType='REL' DocType='XCD' SubType='Call' Format='XML'/>
<Part File='file:SEQ014/DET3262874.9.1.xml' LinkType='REL' DocType='XCD' SubType='Call' Format='XML'/>
<Part File='file:SEQ014/DET3262874.9.2.xml' LinkType='REL' DocType='XCD' SubType='Call' Format='XML'/>
<Part File='file:SEQ014/DET3262874.9.3.xml' LinkType='REL' DocType='XCD' SubType='Call' Format='XML'/>
<Part File='file:SEQ014/DET3262874.9.4.xml' LinkType='REL' DocType='XCD' SubType='Call' Format='XML'/>
<Part File='file:SEQ014/DET3262874.9.5.xml' LinkType='REL' DocType='XCD' SubType='Charge' Format='XML'/>
<Part File='file:SEQ014/INV3262874.9.xml' LinkType='REL' DocType='INV' Format='XML'/>
<Part File='file:SEQ014/INVINFO3262874.9.xml' LinkType='REL' DocType='IIN' Format='XML'/>
<Part File='file:SEQ014/SUM3262874.9.xml' LinkType='REL' DocType='SUM' Format='XML'/>
<Part File='file:SEQ014/BAL3262874.9.xml' LinkType='REL' DocType='BAL' Format='XML'/>
<Part File='file:SEQ014/ADDR3262874.9.xml' LinkType='REL' DocType='ADD' Format='XML'/>
</Envelope>

现在,我正在访问底部的文件,如下所示:

<xsl:param name="BillingDocument2" select="/Bill/Part[@DocType='ADD']/@File"/>
<xsl:param name="BillingDocument3" select="/Bill/Part[@DocType='INV']/@File"/>
etc...

之后,我就像这样引用它们:

<xsl:variable name="var13_Document" select="document($BillingDocument2)/Document"/>
etc...

但是,我不知道如何使用前5个XML文件中的数据?所有这些文件具有相同的结构,基本上,它是一个大文件,分成5个较小的文件... 我需要在一个地方拥有这5个文件的所有数据(它们的数量会因具体情况而异),所以我可以用同样的方式处理它... 哦,是的,我只能使用XSLT1!

1 个答案:

答案 0 :(得分:0)

答案基本上与您访问其他答案的方式相同。如果你说

<xsl:param name="XCDDocs" select="/Bill/Part[@DocType='XCD']/@File"/>

然后这将为您提供一个变量,其值为一组5个节点(来自所讨论的五个File元素中的每一个的Part属性节点)。现在,当您将节点集传递给document函数时,您将获得另一个节点集,该节点集由文档中的根节点组成,其URI由原始集中每个节点的字符串值给出。因此

document($XCDDocs)/Document

是一组五个节点,五个文件中每个文件的Document元素,以及

<xsl:apply-templates select="document($XCDDocs)/Document/*" />

将在所有五个文件等中为文档元素的所有第一级子元素应用模板

相关问题