2017-05-15 58 views
-1

我是新來的java,想知道哪種方法讀取XML更好。將XML讀取爲字符串並將XML讀取爲DOM(或任何其他方法)。只是好奇地想知道,如果將XML讀爲字符串比DOM更好,或者以任何方式有效地讀取XML。閱讀XML作爲字符串與讀取XML作爲DOM中的Java

+1

作爲一般的觀點,沒有人可以說,不知道(a)你想要達到的目標和(b)你如何衡量善良(性能?代碼行?可維護性?) 。在這種特殊情況下,甚至不清楚「將XML讀作字符串」的含義。 –

回答

0

如果您不需要任何內容​​處理,將XML文件讀取爲字符串是有意義的。例如。當Web服務器將XML文件原樣發送到客戶端時。在這種情況下,解析XML將會產生反作用。

但是在所有其他情況下,應該解析XML。通過正則表達式操作XML字符串尤其不是一個好主意。

您從解析中得到的最基本的東西是確定性良好形成性。解析過程只能完成真正的XML文檔。

好構性是指:

  • 只有一個根節點。
  • 始終匹配開始和結束元素。
  • 沒有特殊字符,如<,>&用於文本。必須相應地逃脫。
  • 文本中的字符(文本節點和屬性)被正確編碼(根據聲明的編碼或作爲unicode實體)。

此外,您可以驗證針對DTD或XSD架構的XML文檔。所以你可以確定文檔結構。

如果你有一個解析DOM文檔,你可以

  • 訪問和操作的節點
  • 查詢使用XPath
  • 等轉換通過XSLT文檔的某些節點
  • 通過XQuery的(與第三方
  • 查詢通過JAXB
庫等撒克遜)
  • 和解組到Java對象

    但是這僅適用於中小型文檔,因爲整個文檔樹必須完全保留在內存中。

    除了DOM還有其他的技術來處理大型XML文檔,而不需要保存文檔存儲:

    • SAX:低層次的API來處理與回調XML。您實現了一個處理程序類,解析器爲每個打開的標記,關閉標記,文本節點等調用您的處理程序方法。
    • StAX:更現代的拉API(包括簡單易用的低級事件API和更高級別的流API)編寫API。
  • 0
    • 特殊字符會轉換回原始形式,而您將其作爲DOM進行紅色處理。 像&lt;轉換爲<
      和其他類似&lt; (<), &amp; (&), &gt; (>), &quot; ("), and &apos; (')
    • 這是很容易,當你閱讀的DOM(即可以在DOM不能轉換,如果你的XML是無效的自動處理在DOM
    • 驗證中的XML數據)