apply-templates select =" @ * | node()

时间:2014-11-21 12:28:39

标签: xml xslt

我对xslt很新。请帮助我理解下面xslt的流程如何适用于给定的xml

输出是否与输入相同,或输出是否仅包含属性。

<xsl:template match="/">

<Request>   
    <xsl:apply-templates select="Envelope/body/*" /> 
</Request>           
</xsl:template>

<xsl:template match="*">
    <xsl:element name="{local-name()}">
        <xsl:apply-templates select="@*|node()"/>
    </xsl:element>
</xsl:template>

<xsl:template match="@*">
    <xsl:attribute name="{local-name()}">
        <xsl:value-of select="."/>
    </xsl:attribute>
</xsl:template>

由于

1 个答案:

答案 0 :(得分:0)

流程如下:

  • 匹配根节点(也称为文档),并输出<Request>元素。
  • 然后匹配下面的元素(*Envelope/body
  • 其余两个模板匹配任何元素(*)或属性 (@*)并输出相同的内容,除了没有命名空间部分 组件名称。
    • 对于元素,此处理以递归方式继续 (<xsl:apply-templates select="@*|node()"/>)直到没有孩子为止。
    • 对于属性,输出值并处理最低点。

实际上,该脚本旨在输出包含在<Request>元素中的信封正文内容,而不包含名称空间。