2012-09-07 35 views
1

我重新說我的問題,因爲'解析的實體'的東西與手頭的問題無關。xml 1.1規範中的'分析數據'是什麼意思?

XML 1.1比1.0

是一個XML 1.1庫是序列化/反序列化之前逃脫非法字符?或者圖書館是否完全禁止他們?哪個是在xml元素上設置文本的正確方法?

如果元素e =新元素( 「富」)

我應該這樣做:

e.setText(sanitized_text_illegal_characters_removed_or_escaped)?

e.setText(any_text)

+1

XML 1.1規範不限制XML庫的API,因此對於不同的XML 1.1庫,您的問題的答案可能會有所不同;找出問題的唯一方法是查看有問題的庫的文檔(或者,如果沒有,請測試它的行爲)。 –

回答

1

一個解析實體是你並不需要擔心,除非你正在編寫一個XML解析器的東西。這是像<&。你可以在文檔DTD中定義你自己的,但它是一個很少使用的功能。一個外部解析實體是其內容駐留在另一個文件或網絡資源或類似的地方。

至於你的主要問題:

這是設置XML元素上的文本的正確方法是什麼?

如果元素e =新元素( 「富」)

我應該這樣做:

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. 最終軟件檢索字符串「bed & breakfast」。
+0

那麼如果我使用xml 1.1呢。插入文本時是否有字符不能使用?還是由XML庫負責確保它在另一端完全兼容? –

+0

有些字符在XML文檔中始終無效,即使在轉義時也是如此。例如,NULL字符。如果您想要以XML格式存儲二進制數據,則應首先將其轉換爲其他文本格式(如Base64),然後從另一端的Base64解碼。 – porges

+0

NULL和其他主機...垂直製表符等 [#x1-#x8] | [#xB-#xC] | [#xE-#x1F] | [#x7F-#x84] | [#x86-#x9F] –

1

如果您以編程方式編寫XML,那麼您幾乎肯定不想使用解析的實體。

有兩種解析實體:內部和外部。內部已析實體由DTD聲明這樣定義:

<!ENTITY me "Mike"> 

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

一個外部解析實體由DTD聲明中定義是這樣的:

<!ENTITY me SYSTEM "me.xml"> 

是否

:實體是內部或外部的,它可以通過這樣一個實體引用來引用

它可以出現在元素或屬性的內容中。

相關問題