如何保留和转义不匹配的元素?

发布于 2024-11-27 17:51:13 字数 1311 浏览 0 评论 0原文

考虑这个 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 &lt;bar&gt;blah&lt;/bar&gt; 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>

我很绝望,因此,如果您有任何保留和转义这些无用元素的解决方案,我将非常高兴!

Considering this XML code:

<root>
blah <foo>blah</foo> blah <bar>blah</bar> blah
</root>

And his associated stylesheet:

<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>

After transofrmation with the XSLTProcessor class (PHP), here is the output:

blah <strong>blah</strong> blah blah blah

But I rather want this output (unknown elements in the stylesheet are escaped):

blah <strong>blah</strong> blah <bar>blah</bar> blah

My pseudocode proposal:

<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>

I'm desperate, so if you have any solution for keeping and escaping those useless elements, I'll be very happy!

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

╭ゆ眷念 2024-12-04 17:51:13
<?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>
<?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>
梦太阳 2024-12-04 17:51:13

这是我凭空写下的,所以请不要引用我的话: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>

Wrote this off the top of my head, so please don't quote me on that :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>
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文