1

我正在重新措辞我的问题,因为“解析实体”的事情与手头的问题无关。

XML 1.1 与 1.0

xml 1.1 库是在序列化/反序列化之前转义非法字符吗?还是图书馆要彻底禁止他们?在 xml 元素上设置 Text 的正确方法是什么?

如果元素 e = new Element("foo")

我应该这样做:

e.setText(sanitized_text_illegal_characters_removed_or_escaped) ?

或者

e.setText(any_text)

4

2 回答 2

1

除非您正在编写 XML 解析器,否则您实际上不需要担心已解析的实体。<就像和之类的东西&。您可以在文档中定义自己的 DTD,但这是一个很少使用的功能。外部解析实体是其内容驻留在另一个文件或网络资源或类似的地方的实体

至于你的主要问题:

在 xml 元素上设置 Text 的正确方法是什么?

如果元素 e = new Element("foo")

我应该这样做:

e.setText(string_of_sanitized_data_with_illegal_characters_escaped) ?

或者

e.setText(any_text)

当文档被反序列化时,您应该将文本设置为您希望它出现的另一端。这通常意味着您不应该转义数据,XML 库会为您执行此操作。

例如:

  1. 您插入文本“床和早餐”。
  2. XML 库将其转换为 " bed &amp; breakfast" 或 " <![CDATA[bed & breakfast]]>" 或其他表示形式,这并不重要。
  3. 您将文档发送到其他地方。
  4. 另一个解析器读取文档并将文本转换回来。
  5. 终端软件检索字符串“床和早餐”。
于 2012-09-07T12:18:23.903 回答
1

如果您以编程方式编写 XML,那么您几乎肯定不想使用已解析的实体。

有两种类型的解析实体:内部和外部。内部解析的实体由如下 DTD 声明定义:

<!ENTITY me "Mike">

或者

<!ENTITY me "<name>Mike</name>">

外部已解析实体由 DTD 声明定义,如下所示:

<!ENTITY me SYSTEM "me.xml">

无论实体是内部的还是外部的,它都可以被这样的实体引用引用:

&me;

它可以出现在元素或属性的内容中。

于 2012-09-07T14:23:15.990 回答