我已经在互联网上阅读了几个问题和教程,例如
- > Best XML parser for Java [closed]
- > JAVA XML - How do I get specific elements in an XML Node?
- > What is the best way to create XML files in Java?
- > how to modify xml tag specific value in java?
- > Using StAX - From Oracle Tutorials
- > Apache Xerces Docs
- > Introduction to XML and XML With Java
- > Java DOM Parser - Modify XML Document
但由于这是我第一次不得不在 Java 中操作 XML 文档,所以我仍然有点困惑。 XML 内容是用字符串连接编写的,在我看来这是错误的。连接字符串以生成 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和字符方法。
我不必在硬盘或数据库或其他任何地方序列化 XML 文件,我只需要将其内容传递给网络服务即可。
所以我的问题是,哪种方法才是正确的做法?
- 按照现在的方式连接字符串?
- 使用像 Xerces 这样的 Java API 编写 XML 文件?我不知道如何做到这一点。
使用流读取 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 或其他几个库中的任何一个的模板可能非常有效。它有助于使模板保持“ native ”(您不必将其包装在 "'s 中并对其进行转义),而且它使 XML 远离您的代码,但可以轻松地让您在需要执行的部分中添加标记。
关于java - 用 Java 生成 XML 内容的正确方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34997743/