XSLT の学習を始めたばかりで、重複した要素を無視するのに苦労しています。
私はスタック オーバーフローを検索しており、人々が同様の質問をしているのを見てきました。ファイルのどこで問題が発生したかを確認するために小さな例を試してみたところ、重複した要素を無視することができました。ただし、要素のタイプが複数ある場合、問題が発生するようです。
例えば:
File1.xml
<?xml-stylesheet type="text/xsl" href="merge2.xsl"?>
<Main>
<Records>
<Record>
<Description>A</Description>
</Record>
<Record>
<Description>A</Description>
</Record>
<Record>
<Description>B</Description>
</Record>
<Record>
<Description>C</Description>
</Record>
</Records>
</Main>
merge2.xsl
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/Transform">
<xsl:output method="html"/>
<xsl:template match="/">
<table border="1">
<tr>
<th>Type</th>
<th>Count</th>
</tr>
<xsl:for-each select="Main/Records/Record">
<xsl:if test ="not(preceding-sibling::Record(Description/text() = current()/Description/text()])">
<tr>
<td><xsl:value-of select="Description"/></td>
<td><xsl:value-of select="count(//Record[Description/text()=current()/Description/text()])"/></td>
</tr>
</xsl:if>
</xsl:for-each>
</table>
</xsl:template>
</xsl:stylesheet>
これはうまく機能し、望ましい結果が得られます。
Type Count
A 2
B 1
C 1
ただし、別の Records 要素を追加すると、2 つを次々に処理するように見えます。
<?xml-stylesheet type="text/xsl" href="merge2.xsl"?>
<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>
これにより、次のようになります。
Type Count
A 3
B 2
C 3
B 2
A 3
C 3
レコードの最初のインスタンスを処理しているように見える場所で、次のインスタンスに移動します。2 つの重複を削除する方法はありますか?
Records の各インスタンスを通過するように for-each を変更しようとしましたが、別のテンプレートを作成しようとしましたが、うまく機能していないため、まだ何かが欠けているようです。
助けてくれてありがとう。