1

次の問題があります。いくつかの入力 XML ファイルがあり、そのうちの 1 つに他のファイルへのリンクが含まれています。それは次のようになります。

<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 ファイルのデータを使用する方法がわかりません。これらのファイルはすべて同じ構造を持ち、基本的には 1 つの大きなファイルであり、5 つの小さなファイルに分割されています...これらの 5 つのファイルのすべてのデータを 1 つの場所に保持する必要があります (ファイルの数はケースによって異なります)。私も同じように処理できます... そうそう、XSLT1しか使えません!

4

1 に答える 1

0

答えは、基本的に他のものにアクセスするのと同じ方法です。あなたが言うなら

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

次に、これにより、値が 5 つのノードのセット (問題の 5 つの要素Fileのそれぞれからの属性ノード) である変数が得られます。Partノード セットを関数に渡すと、document別のノード セットが返されます。このノード セットは、元のセット内の各ノードの文字列値によって URI が指定されたドキュメントのルート ノードで構成されます。したがって

document($XCDDocs)/Document

Documentは、5 つのファイルのそれぞれの要素である 5 つのノードのセットです。

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

5 つのファイルすべての document 要素のすべての第 1 レベルの子要素にテンプレートを適用します。

于 2013-01-23T16:14:29.320 に答える