以下に示す形式のXMLファイルがあります。
<toploop id="iamroot">
<firstinner>
<inner1 Sequence="001">
<Number>321</Number>
</inner1>
<inner1 Sequence="002">
<Number>345</Number>
</inner1>
</firstinner>
<secondinner>
<inner2 Sequence="001">
<Number>321</Number>
<secondNumber>189</secondNumber>
</inner2>
<inner2 Sequence="002">
<Number>345</Number>
<secondNumber>998</secondNumber>
</inner2>
</secondinner>
</toploop>
私は多くのことを試しましたが、XSLT / XPathを初めて使用するため、以下のようなデータを表すクエリを取得できません。
iamroot,001,321,189
iamroot,002,345,998
ご覧のとおり、firstinnerタグのinner1シーケンス、numberがsecondinnerタグのinner2シーケンスと一致するかどうかを確認し、numberして、secondinnerタグのinner2のsecondNumberタグ値をこれらの横にプルします。SQLの2つのテーブルの内部結合のように。XSLTでこれを行うことはできますか?値の照合を試みましたが、同じXMLファイル内のデータを照合する方法がわかりません。助けてください。前もって感謝します。同じようにXalan-Cを使用しています。
更新: KayとLarsHに感謝します。次のスクリプトを試しました。
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="text" />
<xsl:template match="inner2" />
<xsl:template match="inner1">
<xsl:variable name="inner2" select="../../secondinner/inner2[Number = current()/Number and @Sequence = current()/@Sequence]"/>
<xsl:if test="$inner2">
<xsl:value-of select="concat(/toploop/@id, ',', /toploop/firstinner/inner1/@Sequence, ',', /toploop/firstinner/inner1/Number, ',', $inner2/secondNumber, ',')" />
</xsl:if>
</xsl:template>
</xsl:stylesheet>
以下のような出力が得られます。
iamroot,001,321,189,
iamroot,002,345,998,
レコードの前に先頭のスペースがなく、データ行の上下に不要な行がない場合、このフォーマットを以下のようにするにはどうすればよいですか。
iamroot、001,321,189、
iamroot、002,345,998、
再度、感謝します。