2015-11-05 31 views
0

我需要從InputStream提取XML文檔並使其可在String(我不能修改這個簽名):輕量級的Java XML解析/渲染循環

String extractXml(InputStream in) { 
    // TODO 
} 

我有兩個問題:

  • 我不想假設XML是UTF-8(或其他)編碼。
  • 我想刪除XML聲明中的encoding屬性(如果存在),因爲它對於XML文檔的文本表示沒有任何意義。

有沒有辦法做到這一點,而不經過一個完整的XML解析/渲染循環?我不想驗證XML聲明之外的XML語法。

回答

0
  1. 看看XmlStreamReader from commons-io爲了建議編碼。

  2. 您可能想要完全刪除XML聲明。沒有xml聲明的格式良好的XML文檔仍然有效。你可以用正則表達式做\\<\\?xml(.+?)\\?\\>

你的代碼可能是這樣的:

String extractXml(InputStream in) { 
    // IOUtils is a util class from commons-io 
    String xml = IOUtils.toString(new XmlStreamReader(in)); 
    xml=xml.replaceAll("\\<\\?xml(.+?)\\?\\>", "").trim(); 
    return xml 
} 
+0

刪除XML聲明可能有副作用('encoding'不是唯一屬性);我對使用正則表達式進行XML解析很煩惱。不過有點風險,謝謝你的回答! –