【问题标题】:Evaluate &lt; &gt; in XML+XSL (aka double parsing)在 XML+XSL 中评估 < >(又名双重解析)
【发布时间】:2013-05-24 16:00:23
【问题描述】:

我刚刚使用导出应用程序将整个 LiveJournal-Blog 导出到 XML 文件。这样做的原因是将其全部存档并为后代保留。我想为它制作一个简单的布局文件,这样我就可以阅读帖子并怀旧。它看起来像任何常规 XML 文件:

<livejournal>
  <entry>
    <itemid>1</itemid>
    <eventtime>Date/time</eventtime>
    <subject>Subject Line</subject>
    <event>The actual post</event>
    <allowmask>0</allowmask>
    <current_mood>current mood</current_mood>
    <current_music>current mood</current_music>
    <taglist>comma, separated, tags</taglist>
    <comment>
      <itemid>2433</itemid>
      <eventtime>Date</eventtime>
      <subject>Subject Line</subject>
      <event>The actual comment</event>
      <author>
        <name>Commenter</name>
        <email>Commenter@email</email>
      </author>
    </comment>
  </entry>
  <entry>
</livejournal>

到目前为止,一切都很好。当我尝试为它制作一个 xsl 文件时,就会出现问题。 xml 文件中的 标记不仅包含文本,还包含 HTML。首先,HTML 编写于 2004 年,由各种 meme 生成器生成。因此,代码的评估价值不高。我们看到可爱的标签如

和大量未封闭的 img、input、br 和 hr 标签。

当前导出已将所有 替换为 <>所以它评估为一个 xml 文件。我想要做的是能够查看带有所有预期 HTML 标记的 XML 文件。所以 使事情变得大胆。但是我不知道该怎么做,因为<b></b>没有正确评估。

<event>I ate a &lt;b&gt;tasty&lt;/b&gt; cucumber</event>

输出

我吃了一个好吃的黄瓜

而不是

我吃了一个好吃的黄瓜

有没有办法解决这个问题?由于将 xml 文件中的所有 lt、gt 更改为 ,因此由于 HTML 错误而无法对其进行评估。而且我不想通过 700 多个帖子来手动正确评估内容。

【问题讨论】:

    标签: html xml xslt escaping evaluate


    【解决方案1】:

    &lt;xsl:value-of select="entry" disable-output-escaping="yes"/&gt; 可以解决问题。

    XSLT 示例:

    <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
        version="1.0">
    
        <xsl:template match="/">
            <html>
                <head></head>
                <body>                
                    <xsl:apply-templates select="*"/> 
                </body>
            </html>
        </xsl:template>
    
        <xsl:template match="*">
            <xsl:apply-templates select="*"/>
        </xsl:template>
    
        <xsl:template match="event">
            <div class="event">
                <xsl:value-of select="." disable-output-escaping="yes"/>                        
            </div>
        </xsl:template>
    
    </xsl:stylesheet>
    

    继续运行:

    <livejournal>
        <entry>
            <itemid>1</itemid>
            <eventtime>Date/time</eventtime>
            <subject>Subject Line</subject>
            <event>I ate a &lt;b&gt;tasty&lt;/b&gt; cucumber</event>
            <allowmask>0</allowmask>
            <current_mood>current mood</current_mood>
            <current_music>current mood</current_music>
            <taglist>comma, separated, tags</taglist>
            <comment>
                <itemid>2433</itemid>
                <eventtime>Date</eventtime>
                <subject>Subject Line</subject>
                <event>The actual comment</event>
                <author>
                    <name>Commenter</name>
                    <email>Commenter@email</email>
                </author>
            </comment>
        </entry>
    </livejournal>
    

    结果:

    <html>
       <head>
          <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
       </head>
       <body>
          <div class="event">I ate a <b>tasty</b> cucumber</div>
          <div class="event">The actual comment</div>
       </body>
    </html>
    

    【讨论】:

    • 它在 Chrome 和 FireFox 中不起作用,但在 Internet Explorer 中起作用!如果我能以某种方式查看它,我会很高兴,所以它对我有用。非常感谢您的帮助!
    • 您是否尝试将其作为本地文件运行?如果是这样,您可能会遇到同源策略 (developer.mozilla.org/en-US/docs/Web/JavaScript/…)。您可能需要从服务器运行它,以便 Chrome 和 Firefox 能够解析。不过我还没有在那里尝试过,它是用撒克逊和 xalan 测试的。
    • 我建立了一个快速的网络服务器 (node.js) 来提供这里的 xml 页面,完成后它在 chrome 上运行良好,但在 Firefox 上却不行。在 firefox 上,当在检查器中查看时,它看起来解析得很好,只是不知道如何渲染(一定是 firefox 中的 xsl 渲染器有问题)。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-10-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-10-03
    • 2014-07-26
    • 2012-01-06
    相关资源
    最近更新 更多