我在这个例子中遇到了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特殊字符(&lt;&gt;)。那么如何将这些数据作为未解析的数据包含在内?
我希望得到类似这样的结果:
<?xml version="1.0"?>
<extract>
<data><![CDATA[1 <15024
2 >15023]]></data>
</extract>
答案 0 :(得分:2)
首先,仅供参考,您所指的是外部解析的一般实体,而不是未解析的实体。
尽管您的data.txt文件本身不需要格式良好,但在包含时必须格式良好。由于CDATA部分不解析实体(包括外部实体),因此您必须在外部实体文件本身内进行转义(可能通过服务器端处理文件,如果不能,则可以将其作为外部实体文件引用)不希望手动逃避。
如果您可以控制文件内容并希望手动处理转义,也许您可以通过文件本身内的CDATA块简单地包围每个文件的文本,因为在包含时它应该是格式良好的。 (我没有尝试或确认过,但它似乎应该有效,因为这些实体只有在包含时才需要格式良好。)
或者,您的另一个选择是逃避<
和&
字符(除非具有讽刺意味,否则您通常不得逃避>
CDATA部分,以防万一文本可能包含序列]]>
- 所以如果你采用CDATA方法,你可能需要解决这种可能性)。 (由于外部实体不能在属性中使用,因此您无需担心转义'
或"
,也没有提及想要这样做。)