我有一个 XML,它可能类似于以下内容之一:
// #1
<A>
<B>... stuff ...</B>
</A>
// #2
<B>... stuff ...</B>
我需要将这些转换为一个响应节点,这两个实例看起来应该相同。有点像这样:
<fooMethodResponse>
... one thing from A if A was root ...
... stuff from B ...
</fooMethodResponse>
我怎样才能在不重复自己的情况下做到这一点?我现在已经这样做了:
<xsl:template match="/A">
<fooMethodResponse>
<xsl:apply-templates select="B" mode="get-B" />
<xsl:element name="processId">
<xsl:value-of select="@id" />
</xsl:element>
</fooMethodResponse>
</xsl:template>
<xsl:template match="/B">
<fooMethodResponse>
<xsl:apply-templates select="." mode="get-B" />
</fooMethodResponse>
</xsl:template>
<xsl:template match="B" mode="get-B"></xsl:template>
这里的问题是我正在重复响应包装器,我只想将它放在一个地方。想我可以做这样的事情:
<xsl:template match="/">
<fooMethodResponse>
<xsl:choose>
<xsl:when test="node name is A">
<xsl:when test="node name is B">
</xsl:choose>
</fooMethodResponse>
</xsl:template>
但我不知道如何编写测试来检查根元素的节点名称。根元素的处理方式是否有所不同?
我想给出更准确的例子,但里面有很多商业内容,所以我试着把它归结为:p