不,覆盖身份转换的模板本身不会被视为身份转换。
使用身份转换模板的方法是让它默认复制从输入 XML 到输出 XML 的所有内容,但在需要时使用更具体的模式覆盖身份转换。match
例如,考虑这个 SOAP 消息:
<env:Envelope xmlns:env="http://www.w3.org/2003/05/soap-envelope">
<env:Header>
<n:alertcontrol xmlns:n="http://example.org/alertcontrol">
<n:priority>1</n:priority>
<n:expires>2001-06-22T14:00:00-05:00</n:expires>
</n:alertcontrol>
</env:Header>
<env:Body>
<m:alert xmlns:m="http://example.org/alert">
<m:msg>Pick up Mary at school at 2pm</m:msg>
</m:alert>
</env:Body>
</env:Envelope>
如果我们想将此消息转换为几乎相同但可能具有不同m:msg
内容的另一个消息,我们可以使用带有覆盖m:msg
的身份转换:
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:m="http://example.org/alert">
<xsl:output omit-xml-declaration="yes" indent="yes"/>
<xsl:strip-space elements="*"/>
<xsl:template match="node()|@*">
<xsl:copy>
<xsl:apply-templates select="node()|@*"/>
</xsl:copy>
</xsl:template>
<xsl:template match="m:msg">
<xsl:copy>***Pick up Mary at school at 1pm, not 2pm.***</xsl:copy>
</xsl:template>
</xsl:stylesheet>
将上述 XSLT 应用于输入 SOAP 消息会生成相同的 SOAP 消息,但具有新的m:msg
元素内容:
<env:Envelope xmlns:env="http://www.w3.org/2003/05/soap-envelope">
<env:Header>
<n:alertcontrol xmlns:n="http://example.org/alertcontrol">
<n:priority>1</n:priority>
<n:expires>2001-06-22T14:00:00-05:00</n:expires>
</n:alertcontrol>
</env:Header>
<env:Body>
<m:alert xmlns:m="http://example.org/alert">
<m:msg>***Pick up Mary at school at 1pm, not 2pm.***</m:msg>
</m:alert>
</env:Body>
</env:Envelope>