java如何组装xml报文
组装XML报文的常见方法
使用DOM方式生成XML
DOM(Document Object Model)是一种基于树结构的API,适合需要频繁修改XML的场景。
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.transform.TransformerFactory;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
Document doc = factory.newDocumentBuilder().newDocument();
Element root = doc.createElement("root");
doc.appendChild(root);
Element child = doc.createElement("child");
child.setAttribute("attr", "value");
child.setTextContent("text content");
root.appendChild(child);
// 转换为字符串
TransformerFactory.newInstance().newTransformer()
.transform(new DOMSource(doc), new StreamResult(new StringWriter()));
使用StringBuilder拼接
对于简单XML结构,直接字符串拼接是最快捷的方式。
StringBuilder xml = new StringBuilder();
xml.append("<?xml version=\"1.0\" encoding=\"UTF-8\"?>");
xml.append("<root>");
xml.append("<child attr=\"value\">text content</child>");
xml.append("</root>");
String xmlString = xml.toString();
使用JAXB注解绑定
JAXB(Java Architecture for XML Binding)适合对象与XML的相互转换。
import javax.xml.bind.annotation.*;
@XmlRootElement
class Root {
@XmlElement
private String child;
// getters/setters
}
Root obj = new Root();
obj.setChild("value");
JAXBContext context = JAXBContext.newInstance(Root.class);
StringWriter writer = new StringWriter();
context.createMarshaller().marshal(obj, writer);
String xml = writer.toString();
使用XStream库
XStream提供简单的API实现对象与XML转换。
XStream xstream = new XStream();
xstream.alias("root", Root.class);
String xml = xstream.toXML(new Root());
各方法对比
DOM方式适合需要动态构建复杂XML结构的场景,但代码量较大。StringBuilder适合简单固定结构的快速生成。JAXB和XStream适合对象与XML的映射转换,需要预先定义好Java类结构。

注意事项
特殊字符需要转义处理,如<应转换为<。建议使用XML库自带的转义方法,避免手动处理。对于生产环境,应考虑使用XML模板引擎(如Freemarker)或专业XML构建工具。






