Java String 转 XML 的方法
在 Java 中,将字符串转换为 XML 有多种方法,具体取决于你的需求和场景,以下是几种常见的实现方式:

(图片来源网络,侵删)
使用 DOM 解析器
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import org.w3c.dom.Document;
public class StringToXml {
public static void main(String[] args) {
String xmlString = "<root><name>John</name><age>30</age></root>";
try {
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
DocumentBuilder builder = factory.newDocumentBuilder();
Document document = builder.parse(new InputSource(new StringReader(xmlString)));
// 现在可以使用 document 对象操作 XML
System.out.println("XML 解析成功");
} catch (Exception e) {
e.printStackTrace();
}
}
}
使用 StringReader 和 InputSource
import org.xml.sax.InputSource;
import java.io.StringReader;
public class StringToXml {
public static void main(String[] args) {
String xmlString = "<root><name>John</name><age>30</age></root>";
try {
InputSource source = new InputSource(new StringReader(xmlString));
// 可以将 source 传递给 SAX 或 DOM 解析器
System.out.println("InputSource 创建成功");
} catch (Exception e) {
e.printStackTrace();
}
}
}
使用 JAXB (Java Architecture for XML Binding)
import javax.xml.bind.JAXBContext;
import javax.xml.bind.Unmarshaller;
import java.io.StringReader;
public class StringToXml {
public static void main(String[] args) {
String xmlString = "<person><name>John</name><age>30</age></person>";
try {
JAXBContext jaxbContext = JAXBContext.newInstance(Person.class);
Unmarshaller unmarshaller = jaxbContext.createUnmarshaller();
Person person = (Person) unmarshaller.unmarshal(new StringReader(xmlString));
System.out.println("姓名: " + person.getName());
System.out.println("年龄: " + person.getAge());
} catch (Exception e) {
e.printStackTrace();
}
}
}
// 对应的 Java 类
class Person {
private String name;
private int age;
// getters and setters
public String getName() { return name; }
public void setName(String name) { this.name = name; }
public int getAge() { return age; }
public void setAge(int age) { this.age = age; }
}
使用 DOM4J 库
import org.dom4j.Document;
import org.dom4j.DocumentHelper;
import org.dom4j.Element;
public class StringToXml {
public static void main(String[] args) {
String xmlString = "<root><name>John</name><age>30</age></root>";
try {
Document document = DocumentHelper.parseText(xmlString);
Element root = document.getRootElement();
System.out.println("根元素名: " + root.getName());
System.out.println("姓名: " + root.element("name").getText());
System.out.println("年龄: " + root.element("age").getText());
} catch (Exception e) {
e.printStackTrace();
}
}
}
使用 StAX (Streaming API for XML)
import javax.xml.stream.XMLInputFactory;
import javax.xml.stream.XMLStreamConstants;
import javax.xml.stream.XMLStreamReader;
import java.io.StringReader;
public class StringToXml {
public static void main(String[] args) {
String xmlString = "<root><name>John</name><age>30</age></root>";
try {
XMLInputFactory factory = XMLInputFactory.newInstance();
XMLStreamReader reader = factory.createXMLStreamReader(new StringReader(xmlString));
while (reader.hasNext()) {
int event = reader.next();
switch (event) {
case XMLStreamConstants.START_ELEMENT:
System.out.println("开始元素: " + reader.getLocalName());
break;
case XMLStreamConstants.CHARACTERS:
System.out.println("文本内容: " + reader.getText());
break;
case XMLStreamConstants.END_ELEMENT:
System.out.println("结束元素: " + reader.getLocalName());
break;
}
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
注意事项
- XML 格式验证:确保字符串是格式良好的 XML,否则会抛出异常
- 字符编码:处理特殊字符时要注意编码问题
- 性能考虑:
- DOM 适合小型文档,内存占用较大
- SAX 和 StAX 适合大型文档,流式处理
- DOM4J 性能较好,是第三方库
- 异常处理:XML 解析可能会抛出多种异常,需要妥善处理
选择哪种方法取决于你的具体需求,如文档大小、性能要求、是否需要绑定到 Java 对象等。

(图片来源网络,侵删)
