我正在重写我的问题,因为'解析实体'与手头的问题无关。
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)
答案 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:
bed & breakfast
”或“<![CDATA[bed & breakfast]]>
”或其他一些表示,这并不重要。答案 1 :(得分:1)
如果您以编程方式编写XML,那么您几乎肯定不想使用已解析的实体。
有两种解析实体:内部和外部。内部解析的实体由DTD声明定义,如下所示:
<!ENTITY me "Mike">
或
<!ENTITY me "<name>Mike</name>">
外部解析实体由DTD声明定义,如下所示:
<!ENTITY me SYSTEM "me.xml">
无论实体是内部实体还是外部实体,它都可以被实体引用引用,如下所示:
&me;
可以出现在元素或属性的内容中。