我有两个需要合并的 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>
第一个是原始 XML。请求已被提取并发送到系统,接下来是响应。现在我需要合并这两个并将请求 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>
这里有两个问题。
- 首先,
position()
不会匹配。有没有办法获取cm:Request
您所在元素的数量/位置,而不是所有兄弟元素的数量/位置?因此,cm:Request
无论前面是否有任何元素,第一个总是给出 1。 - 其次,由于某种原因,我得到了每个请求中所有响应的副本。如果我更改
position()
为 example1
,我只会在每个请求中获得第一个响应的副本。我在这里做错了什么?
希望有人知道我应该在这里做什么,因为我现在有点空白,我的 Google-fu 让我失望了:P
总而言之,如何将第 n 个元素与 nameblah
与参数节点集中的第 n 个子元素进行匹配?