[英]What's the right way to produce a XML content in Java?
我已經通過互聯網閱讀了一些問題和教程,例如
但是由於這是我第一次必須使用Java操作XML文檔,所以我仍然有些困惑。 XML內容是用String串聯編寫的,在我看來這是錯誤的。 串聯字符串以生成JSON對象而不是使用JSONObject類是相同的。 這就是現在編寫代碼的方式:
"<msg:restenv xmlns:msg=\"http://www.b2wdigital.com/umb/NEXM_processa_nf_xml_req\" xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xsi:schemaLocation=\"http://www.b2wdigital.com/umb/NEXM_processa_nf_xml_req req.xsd\"><autenticacao><usuario>"
+ usuario + "</usuario><senha>" + StringUtils.defaultIfBlank(UmbrellaRestClient.PARAMETROS_INFRA_UMBRELLA.get("SENHA_UMBRELLA"), "WS.INTEGRADOR")
+ "</senha></autenticacao><parametros><parametro><p_vl_gnre>" + valorGNRE + "</p_vl_gnre><p_cnpj_destinatario>" + cnpjFilial + "</p_cnpj_destinatario><p_num_ped_compra>" + idPedido
+ "</p_num_ped_compra><p_xml_sefaz><![CDATA[" + arquivoNfe + "]]></p_xml_sefaz></parametro></parametros></msg:restenv>"
在我的研究中,我認為我讀過的幾乎所有文章都將SAX視為最佳解決方案,但我從未真正發現對其有用的東西,幾乎所有內容都表明我們必須創建一個處理程序並覆蓋startElement,endElement和characters方法。 。
我不必序列化硬盤或數據庫中的XML文件或其他任何東西,只需要將其內容傳遞給Web服務即可。
所以我的問題確實是,哪種方法正確?
讀取帶有流的XML文件,僅更改節點文本? 沒有文件的我的XML像這樣:
<msg:restenv xmlns:msg="{url}" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="{schemaLocation}"> <autenticacao> <usuario></usuario> <senha></senha> </autenticacao> <parametros> <parametro> <p_vl_gnre></p_vl_gnre> <p_cnpj_destinatario></p_cnpj_destinatario> <p_num_ped_compra></p_num_ped_compra> <p_xml_sefaz><![CDATA[]]></p_xml_sefaz> </parametro> </parametros> </msg:restenv>
我還讀過一些有關使用Apache Velocity作為模板引擎的信息,因為我實際上不必序列化XML,而我真的很喜歡這種方法,因為我已經使用了該框架,並且它是一個非常簡單的框架。
再說一次,我不是在尋找最佳方法,而是在尋找正確的方法,並附上教程和示例(如果可能)。
這完全取決於上下文。 沒有單一的“正確方法”。
串聯的最大問題是將XML轉義為String常量(這很奇怪),同時轉義可以使用的值,以便它們對於XML文檔正確。
對於小型XML,這很好。
但是對於較大的產品,可能會很痛苦。
如果您的XML大部分都是樣板,只插入了幾個值,則可能會發現使用諸如Velocity之類的模板或其他幾個庫中的任何一個可能是非常有效的。 它有助於使模板保持“本機”狀態(您不必將其包裝在“中”並對其進行轉義),還可以使XML脫離代碼,但可以輕松地標記需要做的部分。
我同意,不僅有一種方法可以這樣做,而且我建議您看一下JAXB。 您可以輕松使用和產生XML,而無需進行任何討厭的String操作。 在這里查找簡單的介紹: https : //docs.oracle.com/javase/tutorial/jaxb/index.html
Will Hartung的答案是正確的。 沒有正確的方法,這取決於您的情況。
對於初學者,我建議手動編寫字符串,這樣您就可以大致了解XML,尤其是您的內容。 至於字符串連接的機制,通常會使用StringBuilder
而不是String
以獲得更好的性能。 需要線程安全的地方,使用StringBuffer
。
主要問題是內存。
另一個問題是驗證。 是否要根據DTD或Schema驗證XML文檔? 有些工具可以這樣做,而有些則不能。
當您需要序列化Java對象的內容並讀回它時,我建議使用Simple XML Serialization庫。 與其他工具相比,具有更快的學習曲線要簡單得多。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.