要保留XML结构,可以使用以下代码示例:
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.ParserConfigurationException;
import org.w3c.dom.Document;
import org.xml.sax.SAXException;
import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.IOException;
import java.nio.charset.StandardCharsets;
public class XmlParser {
public static void main(String[] args) {
try {
// 创建DOM解析器工厂
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
// 创建DOM解析器
DocumentBuilder builder = factory.newDocumentBuilder();
// 解析XML文件
Document document = builder.parse(new File("input.xml"));
// 将Document对象保存为字符串
String xmlString = documentToString(document);
System.out.println(xmlString);
} catch (ParserConfigurationException | SAXException | IOException e) {
e.printStackTrace();
}
}
// 将Document对象保存为字符串
private static String documentToString(Document document) {
try {
ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
javax.xml.transform.TransformerFactory.newInstance().newTransformer().transform(
new javax.xml.transform.dom.DOMSource(document),
new javax.xml.transform.stream.StreamResult(outputStream)
);
return outputStream.toString(StandardCharsets.UTF_8.name());
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
}
import javax.xml.bind.JAXBContext;
import javax.xml.bind.JAXBException;
import javax.xml.bind.Marshaller;
import javax.xml.bind.Unmarshaller;
import java.io.StringReader;
import java.io.StringWriter;
public class XmlConverter {
public static void main(String[] args) {
try {
// 创建JAXB上下文
JAXBContext context = JAXBContext.newInstance(Root.class);
// 创建Unmarshaller
Unmarshaller unmarshaller = context.createUnmarshaller();
// 将XML字符串转换为Java对象
String xmlString = "Value 1 Value 2 ";
StringReader reader = new StringReader(xmlString);
Root root = (Root) unmarshaller.unmarshal(reader);
// 将Java对象转换为XML字符串
Marshaller marshaller = context.createMarshaller();
marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true);
StringWriter writer = new StringWriter();
marshaller.marshal(root, writer);
System.out.println(writer.toString());
} catch (JAXBException e) {
e.printStackTrace();
}
}
}
import javax.xml.bind.annotation.XmlElement;
import javax.xml.bind.annotation.XmlRootElement;
@XmlRootElement(name = "root")
class Root {
@XmlElement
private String element1;
@XmlElement
private String element2;
public String getElement1() {
return element1;
}
public void setElement1(String element1) {
this.element1 = element1;
}
public String getElement2() {
return element2;
}
public void setElement2(String element2) {
this.element2 = element2;
}
}
这两种方法都可以保留XML结构,你可以根据自己的需求选择适合的方法。
上一篇:保留xml.etree命名空间
下一篇:保留XSLT中属性的换行