【问题标题】:Alternative to CDATACDATA 的替代品
【发布时间】:2012-05-26 11:08:45
【问题描述】:

我有一个大型 XML 文件,其中每个节点都需要一个 CDATA 标记。

<root>
    <a>
        <id>my_id</id>
        <tr><![CDATA[This is the data]]></tr>
    </a>
    <b>
        ...
    </b>
</root>

如何避免在每个节点中放置 CDATA? DTDSchema 是否为此提供了方法?

此要求的原因来自内部框架,用于本地化目的。所有包含消息的标签都将被 CDATA,因为它们通常包含特殊字符。我编写的 XML 仅用于演示目的,并不代表我处理的实际数据。

【问题讨论】:

  • 请详细说明为什么你认为这个 CDATA 是必要的,你不能只写 This is the data
  • 我用我需要这个的原因扩展了这个问题。

标签: xml xsd dtd cdata


【解决方案1】:

如何避免在每个节点中放置 CDATA? DTD 或 Schema 是否提供 有什么方法吗?

不... DTD 或 Schema 对您的问题没有帮助。

此要求的原因来自内部框架

嗯...当然,解析文档的 XML 解析器知道该部分是否是 CDATA 部分。这也在 DOM 中通过区分 interface CDATASectioninterface Text 来表示。因此,对于编写 XML 解析器的人来说,强制使用 CDATA 部分而不只是纯文本部分是非常容易的。在 99.9% 的情况下,这完全是愚蠢的,你不应该检查它。但另一方面,我在生活中看到了很多愚蠢的事情,如果您的内部框架这样做并强制 CDATA 部分的存在,我一点也不感到惊讶。

如果是这种情况(试一试),那么您必须编写 CDATA 部分并对此感到满意。如果您对此不满意,您可以编写一个脚本来转换您的 XML 添加这些 CDATA 部分。

【讨论】:

  • 感谢您直接解决问题,不问原因,并在回答后提供额外信息。
【解决方案2】:

CDATA 与节点的内容有关,而模式信息与文档的结构有关。它们并不是特别相关。

查看您的文档,那里不需要CDATA 元素。它仅用于在内容中有尖括号和其他特殊字符时简化内容的解析/写入。

实际的CDATA 语法需要指示CDATA 部分,因为它的意图是支持否则会被解释为XML 的字符。完整的语法可以消除什么是内容和什么是标签的歧义。

【讨论】:

  • 我用我需要这个的原因扩展了这个问题。
【解决方案3】:

所有包含消息的标签都将被 CDATA,因为它们通常包含特殊字符

如果您的真正目标是在 XML 文档中表示特殊字符,那么问题不在于这些字符的解析,而在于它们的编码

CDATA

<![CDATA[ your data ]]>

主要处理(XML)文档的某些内容不必被解析的事实,否则可能会发现一些错误。例如:

    <a>
            <id>my_id</id>
            <tr>& content a </tr>
            <tr> < content b < </tr>
   </a>

随着文档被解析,其内容(即带有标签的文本)也会被解析。两个内容

&内容a

由于字符“&”和“

DTD 和 XSD 都是关于为您的 XML 文档定义一个结构,并且没有明确地提供一种对您的字符进行编码的方法(只有 XSD 会这样做,而是针对二进制数据元素类型)。它们帮助您定义将使用 XML 文档的元素类型(String、Int、Double 等),但将编码问题留给您。

这显然是一个编码问题,而不是解析问题。

【讨论】:

  • 感谢您的详细解释。
猜你喜欢
  • 2012-04-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-11-08
  • 2012-01-25
  • 2015-08-05
  • 2011-01-01
  • 2011-10-24
相关资源
最近更新 更多