XSLT默认模板混淆

Noo*_*oor 2 xslt

我对XSLT处理器节点的方式感到困惑,假设我有一个像这样的XML Doc:

<object>
        <animal>
                <man men="asd">man1</man>
                <man>man2</man>
                <man>man3</man>
                <man>man4</man>
                <cat>cat1</cat>
                <cat>cat2</cat>
                <cat>cat3</cat>
                <cat>cat4</cat>
        </animal>
        <vehicule>
                <car>car1</car>
                <car>car2</car>
                <car>car3</car>
                <car>car4</car>
        </vehicule>
</object>
Run Code Online (Sandbox Code Playgroud)

当我有一个没有任何模板匹配的XSLT,如下所示,它返回所有文本节点,没有属性节点,这没关系

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
</xsl:stylesheet>
Run Code Online (Sandbox Code Playgroud)

但是当我有一个像下面的那个时,它不会返回任何东西:

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
        <xsl:template match="object">
        </xsl:template>
</xsl:stylesheet>
Run Code Online (Sandbox Code Playgroud)

如果我有父节点的显式模板,我应该为父节点的所有子节点都有一个显式模板吗?

phi*_*hag 6

您所看到的只是内置规则的效果,它输出节点的文本值并将模板应用于其所有子节点.

如果您覆盖内置模板,那么您的模板将生效.您想要为以下所有子项应用内置规则object:

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
  <xsl:template match="object">
    <xsl:apply-templates select="*" />
  </xsl:template>
</xsl:stylesheet>
Run Code Online (Sandbox Code Playgroud)