【问题标题】:How to display XML Data in DIV如何在 DIV 中显示 XML 数据
【发布时间】:2021-01-06 12:30:11
【问题描述】:

我想在 DIV 中显示 XML 数据。我的xml代码如下:

<note>
    <to>Tove</to>
    <from>Jani</from>
    <heading>Reminder</heading>
    <body>Don’t forget me this weekend!</body>
</note>

我希望它在 div 中完全显示,所有行间距和 xml 标签都完全一样。

这可能吗?

【问题讨论】:

  • 服务器端语言是哪一种?你的情况是什么?请告诉我们,以便我们提供帮助。
  • 检查我在评论中发布的链接。
  • @jonathan 谢谢它似乎是你有资格投票如果可能的话重新打开这个问题你可以为此重新投票吗?

标签: xml html


【解决方案1】:

所以我猜你的问题是你试图将 XML 代码放入 DIV,而浏览器试图将 XML 标记解释为 HTML 标记?您可以通过将 XML 代码中的所有“”替换为 HTML 特殊字符 > 来防止这种情况发生。和&lt。

【讨论】:

    【解决方案2】:

    &lt;&gt;旁边还需要替换双引号和&号。

    function htmlEntities(str) {
        return String(str).replace(/&/g, '&amp;').replace(/</g, '&lt;').replace(/>/g, '&gt;').replace(/"/g, '&quot;');
    }
    

    这样就可以了。

    【讨论】:

    • 如何保留空白?
    • 已经很久了,但我记得更换它们。将 /r/n 替换为 br,将 /t 替换为空格。不过,我有新代码可以在 div 中显示 xml。无法访问它。我试着回答一下
    • 替换它们会给我一个换行符,所以我试图弄清楚如何在 div 中保留所有花哨的缩进。
    【解决方案3】:

    根据您需要的跨浏览器程度,使用&lt;xmp&gt; 标记或&lt;pre&gt;&lt;code&gt; 标记以及在引号之间表示您的XML 的字符串可能就足够了:

    <div>
      <xmp>
      <Status>
        <Code>0</Code>
        <Text>Success</Text>
      </Status>
      </xmp>
    </div>
    
    <div>
      <pre><code>
      "<Status>
        <Code>0</Code>
        <Text>Success</Text>
      </Status>"
      </pre></code>
    </div>
    

    【讨论】:

    • 感谢您的聪明回答 :)
    【解决方案4】:

    我想出了一种方法来在视觉上保持 xml 原始格式,以便在显示 xml 标记时保持白色间距和换行符。这应该会增强此处给出的答案。我使用 Tim Dev 的方法将 xml 标签的字符串替换为 html 文本可见元素。然后我在 Vadim Kiryukhin 找到的一门课叫做 vkBeautify 预处理后的 xml 会出现在目标文本区域中。

            function addXMLToTextArea(xml) {
                var replaceArgs =  htmlEntities(xml); 
                document.getElementById('viewXML').value=vkbeautify.xml(xml, 4);
            }
    
            function htmlEntities(str) {
               return String(str).replace(/&/g, '&amp;').replace(/</g, '&lt;').replace(/>/g, '&gt;').replace(/"/g, '&quot;');
            }
    

    【讨论】:

      【解决方案5】:

      如果您将您的 HTML 序列化为 XHTML 并使用 application/xhtml+xmlContent-Type 提供它(然后您应该这样做),解决方案将是双重的:

      首先,您可以创建一个 CDATA 转义部分,它告诉任何 XML 或 HTML 解析器,它们不会在 HTML5 模式下解析(这就是为什么序列化为 XHTML 并用作 application/xhtml+xml 很重要的原因),完全忽略 &lt;![CDATA[]]&gt; 之间的内容(实际上根本不解析它,只是传递它):

      <![CDATA[ cr<'az>y text you w</>ant to display verbatim. ]]>
      

      所有这些都是为了让你使用那些特殊字符,否则它们会被认为是标记。它只是让文本“落空”。

      其次,您需要将此CDATA 部分 放在&lt;pre&gt;&lt;/pre&gt; 元素中。这将负责保持 XML 的格式不变(您可能还想添加一个 &lt;code&gt;&lt;/code&gt; 元素,这可能会根据您的用例使您的代码在语义上更合理)。如果您忽略它,那么您想要显示的文本将以&lt;span&gt; 元素的样式显示,即作为纯内联文本,符合流程。这就是为什么一个简单的div 是不够的。

      以下是我刚刚测试成功的sn-p。请注意,我已经留下了缩进,就像在我的源代码中一样,以强调获取内容很重要,您将其包含在 pre 元素中,脱离缩进并按照您在此处看到的方式放置, 否则文本前的所有空格将保留在每行的左侧,因为结果将是逐字显示的内容:

              <div>
                <pre><![CDATA[
      <note>
          <to>Tove</to>
          <from>Jani</from>
          <heading>Reminder</heading>
          <body>Don’t forget me this weekend!</body>
      </note>]]>
                </pre>
              </div>
      

      一个完全不同的选择是实体转义所有定义标记的字符。最重要的是 &amp;lt;&amp;gt; 需要分别表示为 &amp;lt;&amp;gt;。有独立的工具可以做到这一点,但也有一些文本编辑器插件可以做到这一点。然而,这需要额外的处理步骤并且会使事情复杂化。但是你仍然需要&lt;pre&gt; 包裹你的文本。对某些人来说,积极的一面可能是他们不需要序列化为 XHTML。

      【讨论】:

        【解决方案6】:

        把原为replaced "<" and ">"的XML内容放到pre标签里面来显示漂亮:

        &lt;pre lang="xml"&gt;+xml_content+&lt;/pre&gt;

        【讨论】:

          猜你喜欢
          • 2017-11-06
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2019-05-20
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多