默认情况下打印XSLT 1.0文本节点
我已经看过了,但是没有提到引发我问题的比赛模式 我有一个相当复杂的XML结构:默认情况下打印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 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
更多:
<xsl:template match="text()|@*"></xsl:template>
<?xml version="1.0" encoding="UTF-8"?>
<MenuItems><Mi>234567</Mi></MenuItems>