Как сохранить И избежать непревзойденных элементов? - PullRequest
2 голосов
/ 03 августа 2011

Учитывая этот 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>

Я в отчаянии, так что еслиу вас есть какое-то решение для того, чтобы сохранить и избежать этих бесполезных элементов, я буду очень счастлив!

Ответы [ 2 ]

1 голос
/ 03 августа 2011
<?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>&lt;</xsl:text>
            <xsl:value-of select="local-name(.)"/>
            <xsl:apply-templates select="@*"/>
        <xsl:text>&gt;</xsl:text>

        <xsl:apply-templates select="node()"/>

        <xsl:text>&lt;/</xsl:text>
            <xsl:value-of select="local-name(.)"/>
        <xsl:text>&gt;</xsl:text>
    </xsl:template>

    <xsl:template match="@*">
        <xsl:text>&#160;</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>&lt;!--</xsl:text>
         <xsl:value-of select="."/>
          <xsl:text>--&gt;</xsl:text>
    </xsl:template>

    <xsl:template match="processing-instruction()">
         <xsl:text>&lt;? </xsl:text>
         <xsl:value-of select="name()"/>
         <xsl:text>&#160;</xsl:text>
         <xsl:value-of select="."/>
          <xsl:text>?&gt;</xsl:text>
    </xsl:template>
</xsl:stylesheet>
0 голосов
/ 03 августа 2011

Написал это с моей головы, поэтому, пожалуйста, не цитируйте меня об этом: 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()">
        &lt;<xsl:value-of select="local-name(.)"/>&gt;<xsl:value-of select="."/>&lt;/<xsl:value-of select="local-name(.)"/>&gt;
    </xsl:template>

</xsl:stylesheet>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...