【问题标题】:How to Include an unparsed external entity value in a XML?如何在 XML 中包含未解析的外部实体值?
【发布时间】:2012-07-08 19:06:32
【问题描述】:

我在这个例子中有一个 xml 语法错误:

<?xml version="1.0"?>
<!DOCTYPE foo [
    <!ENTITY rules SYSTEM "file://data.txt">
]>
<extract>
    <data>&rules;</data>
</extract>

data.txt 包含的位置:

1    <15024
2    >15023

但我当然有语法错误,因为文本文件 ( ) 中有 wml 特殊字符。那么如何将这些数据包含为未解析的数据呢?

我希望有这样的结果:

<?xml version="1.0"?>
<extract>
    <data><![CDATA[1    <15024
2    >15023]]></data>
</extract>

【问题讨论】:

    标签: xml include cdata


    【解决方案1】:

    首先,仅供参考,您指的是外部解析的一般实体,而不是未解析的。

    虽然您的 data.txt 文件本身不需要格式正确,但包含时必须格式正确。由于 CDATA 部分不解析实体(包括外部实体),因此您必须在外部实体文件本身内进行转义(可能通过服务器端处理文件,如果您不能或您可以将其作为外部实体文件引用,则不希望手动转义)。

    如果您可以控制文件内容并希望手动处理转义,也许您可​​以简单地用文件本身内的 CDATA 块包围每个文件的文本,因为包含时应该格式正确。 (我没有尝试或确认,但它似乎应该可以工作,因为这些实体只需要在包含时格式正确。)

    另外,您的另一个选择是转义 &lt;&amp; 字符(您通常不必转义 &gt;,但具有讽刺意味的是,在 CDATA 部分中,以防文本可能包含序列]]&gt;--所以如果您采用 CDATA 方法,您可能需要解决这种可能性)。 (由于不能在属性中使用外部实体,因此您无需担心转义'",也没有提到想要这样做。)

    【讨论】:

      猜你喜欢
      • 2015-11-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-09-26
      • 2023-03-29
      • 2017-04-04
      • 1970-01-01
      相关资源
      最近更新 更多