マージする必要がある 2 つの XML ドキュメントがあります。
<!-- A.xml -->
<cm:Process>
<cm:Other />
<cm:Elements />
<cm:Request>
<!-- stuff -->
</cm:Request>
<cm:ElementCouldBeHereToo />
<cm:Request>
<!-- stuff -->
</cm:Request>
</cm:Process>
<!-- B.xml -->
<gateway-orders>
<response>
<status />
</response>
<response>
<status />
</response>
</gateway-orders>
1 つ目は元の XML です。要求が取り出されてシステムに送信され、次は応答です。ここで、これら 2 つをマージし、リクエスト N とレスポンス N を一致させて、レスポンスから情報を取得できるようにする必要があります。XSL は A.xml で機能し、B.xml をパラメーターとして取得します。まず、A.xml の要求内に B.xml の正しい応答のコピーを作成しようとしています。
私が抱えている問題は、 を使用できると思っていたのですが、要素が他の要素と混合されているposition()
ため、機能しないことに気付きました。cm:Request
どういうわけかこれらを一致させるために使用できる別の方法はありますか?
これは私が試したものです:
<xsl:import href="identity-transform.xsl" />
<xsl:param name="responses" />
<xsl:template match="cm:Request">
<xsl:copy>
<xsl:apply-templates select="@*|node()" />
<xsl:apply-templates select="$responses/*[1]/*[position()]" />
</xsl:copy>
</xsl:template>
ここには 2 つの問題があります。
- まず
position()
マッチングしません。cm:Request
すべての兄弟要素の数/位置ではなく、現在の要素の数/位置を取得する方法はありますか? そのため、前に要素があるかどうかに関係なく、最初cm:Request
の要素は常に 1 になります。 - 次に、何らかの理由で、各リクエスト内のすべてのレスポンスのコピーを取得します。
position()
たとえばで変更すると1
、各リクエストの最初のレスポンスのコピーのみが取得されます。ここで何が間違っていますか?
誰かが私がここで何をすべきかを知っていることを願っています。なぜなら、私は今少し空白であり、私のGoogle-fuは私を失敗させているからです:P
要約するblah
と、パラメーター ノード セット内の n 番目の子と名前を持つ n 番目の要素をどのように一致させることができますか?