默认情况下打印XSLT 1.0文本节点

默认情况下打印XSLT 1.0文本节点,xslt,pattern-matching,Xslt,Pattern Matching,我已经看过了,但是没有提到引发我问题的比赛模式 我有一个相当复杂的XML结构: <?xml version="1.0" encoding="UTF-8"?> <MATERIAL_DATA> <LOG> <USER>Peter</USER> <DATE>2011-02-18</DATE> <MATERIALS> <item> &

我已经看过了,但是没有提到引发我问题的比赛模式

我有一个相当复杂的XML结构:

<?xml version="1.0" encoding="UTF-8"?>
<MATERIAL_DATA>
<LOG>
    <USER>Peter</USER>
    <DATE>2011-02-18</DATE>
    <MATERIALS>
        <item>
            <MATNR>636207</MATNR>
            <TEXTS>
                <item>
                    <TEXT>granola bar 40gx24</TEXT>
                </item>
            </TEXTS>
            <PRICES>
                <item>
                    <MATNR>636207</MATNR>
                    <COST>125.78</COST>
                </item>
            </PRICES>
            <SALESPRICES>
                <item>
                    <B01>
                        <MATNR>636207</MATNR>
                        <CURR>CZK</CURR>
                        <DATBI>9999-12-31</DATBI>
                        <DATAB>2010-10-05</DATAB>
                    </B01>
                    <B02>
                        <item>
                            <PRICE>477.60</PRICE>
                            <KUNNR>234567</KUNNR>
                        </item>
                    </B02>
                </item>
            </SALESPRICES>
        </item>
    </MATERIALS>
</LOG>
</MATERIAL_DATA>

彼得
2011-02-18
636207
麦片棒40gx24
636207
125.78
636207
捷克克朗
9999-12-31
2010-10-05
477.60
234567
现在,如果我应用以下XSLT,我的输出看起来是正确的:

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
<xsl:output method="xml" indent="yes" encoding="UTF-8"/>

<xsl:template match="node() | @*">
    <xsl:apply-templates select="* | @*" />
</xsl:template>

<xsl:template match="B02">
    <xsl:element name="Mi">
        <xsl:value-of select="item/KUNNR"/>
    </xsl:element>
</xsl:template>

</xsl:stylesheet>

我得到输出:

<?xml version="1.0" encoding="UTF-8"?>
<Mi>234567</Mi>

234567
但如果我应用XSLT:

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">

<xsl:output method="xml" indent="yes" encoding="UTF-8"/>

<xsl:template match="/*">
    <xsl:element name="MenuItems">
        <xsl:apply-templates select="LOG/MATERIALS/item/SALESPRICES/item"/>
    </xsl:element>
 </xsl:template>

<xsl:template match="B02">
    <xsl:element name="Mi">
        <xsl:value-of select="item/KUNNR"/>
    </xsl:element>
</xsl:template>

</xsl:stylesheet>

输出如下所示:

<?xml version="1.0" encoding="UTF-8"?>
<MenuItems>

                        636207
                        CZK
                        9999-12-31
                        2010-10-05
<Mi>234567</Mi>
</MenuItems>

636207
捷克克朗
9999-12-31
2010-10-05
234567
元素
中的所有值都在输出中!但是为什么-我没有匹配
!? 怎么做

<xsl:template match="node() | @*">
<xsl:apply-templates select="* | @*" />
</xsl:template>

使输出正确吗?我所做的就是匹配所有节点或属性,并将模板应用于所有内容或所有属性。 但在我看来,当我与
完全匹配时,应该不会有什么区别! 有人知道为什么会这样吗

感谢您的理解和提示

致以最良好的祝愿,
彼得看来你要撞上那辆车了


特别是文本规则-如果未被覆盖,将复制文本节点。

XSLT包括以下内容():

结果如下:

<?xml version="1.0" encoding="UTF-8"?>
<MenuItems><Mi>234567</Mi></MenuItems>

234567
更多:


感谢lwburk的详细解释!!我会玩这些图案,这绝对不会有什么伤害!谢谢你,Oded,我知道内置的模板规则,但从来没有真正烦恼过。所以我现在就这么做!
<xsl:template match="text()|@*"></xsl:template>
<?xml version="1.0" encoding="UTF-8"?>
<MenuItems><Mi>234567</Mi></MenuItems>