考虑这个XML代码:
<root>
blah <foo>blah</foo> blah <bar>blah</bar> blah
</root>
他的相关样式表:
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output omit-xml-declaration="yes"/>
<xsl:template match="foo">
<strong><xsl:apply-templates/></strong>
</xsl:template>
</xsl:stylesheet>
使用XSLTProcessor类(PHP)进行转换后,输出结果如下:
blah <strong>blah</strong> blah blah blah
但我更喜欢这个输出(样式表中的未知元素被转义):
blah <strong>blah</strong> blah <bar>blah</bar> blah
我的伪代码提案:
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output omit-xml-declaration="yes"/>
<xsl:template match="foo">
<strong><xsl:apply-templates/></strong>
</xsl:template>
<xsl:template match="all elements other than foo (with their attributs :p)">
<xsl:copy-of select="node()" escape="yes"/>
</xsl:template>
</xsl:stylesheet>
我很绝望,所以如果你有任何保存和逃避这些无用元素的解决方案,我会非常高兴!
答案 0 :(得分:1)
<?xml version="1.0"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output omit-xml-declaration="yes"/>
<xsl:template match="root">
<xsl:apply-templates/>
</xsl:template>
<xsl:template match="foo">
<strong><xsl:value-of select="."/></strong>
</xsl:template>
<xsl:template match="*">
<xsl:text><</xsl:text>
<xsl:value-of select="local-name(.)"/>
<xsl:apply-templates select="@*"/>
<xsl:text>></xsl:text>
<xsl:apply-templates select="node()"/>
<xsl:text></</xsl:text>
<xsl:value-of select="local-name(.)"/>
<xsl:text>></xsl:text>
</xsl:template>
<xsl:template match="@*">
<xsl:text> </xsl:text>
<xsl:value-of select="name()" />
<xsl:text>="</xsl:text>
<xsl:value-of select="." />
<xsl:text>"</xsl:text>
</xsl:template>
<xsl:template match="comment()">
<xsl:text><!--</xsl:text>
<xsl:value-of select="."/>
<xsl:text>--></xsl:text>
</xsl:template>
<xsl:template match="processing-instruction()">
<xsl:text><? </xsl:text>
<xsl:value-of select="name()"/>
<xsl:text> </xsl:text>
<xsl:value-of select="."/>
<xsl:text>?></xsl:text>
</xsl:template>
</xsl:stylesheet>
答案 1 :(得分:0)
写下我的头脑,所以请不要引用我:D
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output omit-xml-declaration="yes"/>
<xsl:template match="root">
<xsl:apply-templates/>
</xsl:template>
<xsl:template match="foo">
<strong><xsl:value-of select="."/></strong>
</xsl:template>
<xsl:template match="node()">
<<xsl:value-of select="local-name(.)"/>><xsl:value-of select="."/></<xsl:value-of select="local-name(.)"/>>
</xsl:template>
</xsl:stylesheet>