xml 1.1规范中的'解析数据'是什么意思?

时间:2012-09-07 12:11:32

标签: java xml xml-parsing

我正在重写我的问题,因为'解析实体'与手头的问题无关。

XML 1.1与1.0

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

如果元素e =新元素(“foo”)

我应该这样做:

e.setText(sanitized_text_illegal_characters_removed_or_escaped)?

e.setText(any_text)

2 个答案:

答案 0 :(得分:1)

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

关于你的主要问题:

  

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

     

如果元素e =新元素(“foo”)

     

我应该这样做:

     

e.setText(string_of_sanitized_data_with_illegal_characters_escaped)?

     

     

e.setText(any_text)

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

e.g:

  1. 您插入文字“bed& breakfast”。
  2. XML库将其转换为“bed &amp; breakfast”或“<![CDATA[bed & breakfast]]>”或其他一些表示,这并不重要。
  3. 您将文件发送到其他地方。
  4. 另一个解析器读取文档并将文本转换回来。
  5. 最终软件检索字符串“bed&amp; breakfast”。

答案 1 :(得分:1)

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

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

<!ENTITY me "Mike">

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

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

<!ENTITY me SYSTEM "me.xml">

无论实体是内部实体还是外部实体,它都可以被实体引用引用,如下所示:

&me;

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