最近、複数の要素を無視する方法について質問したところ、「先行」と Muenchian メソッドの使用に関して良い回答が得られました。ただし、インデックスxmlファイルを使用して、複数のファイルでこれを行うことができるかどうか疑問に思っていました.
索引.xml
<?xml-stylesheet type="text/xsl" href="merge2.xsl"?>
<list>
<entry name="File1.xml" />
<entry name="File2.xml" />
</list>
XML ファイルの例
<Main>
<Records>
<Record>
<Description>A</Description>
</Record>
<Record>
<Description>A</Description>
</Record>
<Record>
<Description>B</Description>
</Record>
<Record>
<Description>C</Description>
</Record>
</Records>
<Records>
<Record>
<Description>B</Description>
</Record>
<Record>
<Description>A</Description>
</Record>
<Record>
<Description>C</Description>
</Record>
<Record>
<Description>C</Description>
</Record>
</Records>
</Main>
Merge2.xsl
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" >
<xsl:output method="xml" indent="yes" />
<xsl:key name="Record-by-Description" match="Record" use="Description"/>
<xsl:template match="@* | node()">
<xsl:apply-templates select="@* | node()"/>
</xsl:template>
<xsl:template match="Main">
<table>
<tr>
<th>Type</th>
<th>Count</th>
</tr>
<xsl:apply-templates select="Records"/>
</table>
</xsl:template>
<xsl:template match="Records">
<xsl:apply-templates select="Record[generate-id() = generate-id(key('Record-by-Description', Description)[1])]" mode="group"/>
</xsl:template>
<xsl:template match="Record" mode="group">
<tr>
<td>
<xsl:value-of select="Description"/>
</td>
<td>
<xsl:value-of select="count(key('Record-by-Description', Description))"/>
</td>
</tr>
</xsl:template>
</xsl:stylesheet>
これは 1 つのファイルで問題なく動作し、1 つのテーブルを生成するという望ましい結果が得られます。一意のアイテムのみが表示され、カウントが追加されます。ただし、複数のファイルの index.xml を調べたときに、目的の結果を生成できませんでした。
index.xml を対象とする別のテンプレートを使用して、「メイン」テンプレートをさまざまな XML ファイルに適用しようとしました。また、for-each を使用してさまざまなファイルを循環しようとしました。
Muenchian メソッドを紹介する前は、for-each を「先行」で使用して重複ノードをチェックしていましたが、「先行」は現在のドキュメントを検索するだけのようで、複数のドキュメント間でこれを使用することに関する情報を見つけることができませんでした。
これらの方法のいずれかを使用して、複数のドキュメントから重複した要素テキストを検索することは可能ですか?
助けてくれてありがとう。