动态XML 是指根据数据动态生成的XML文档。在软件开发中,经常需要根据不同的数据结构生成相应的XML格式,以便于数据的传输和存储。List<Object>
是一种常见的数据结构,可以包含多个不同类型的对象。
假设我们有一个 List<Object>
,其中包含不同类型的对象,我们需要将其转换为XML格式。
import java.util.List;
import java.util.ArrayList;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.DocumentBuilder;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
public class DynamicXMLGenerator {
public static String generateXML(List<Object> objects) throws Exception {
DocumentBuilderFactory docFactory = DocumentBuilderFactory.newInstance();
DocumentBuilder docBuilder = docFactory.newDocumentBuilder();
Document doc = docBuilder.newDocument();
Element rootElement = doc.createElement("Root");
doc.appendChild(rootElement);
for (Object obj : objects) {
Element item = doc.createElement("Item");
rootElement.appendChild(item);
if (obj instanceof Person) {
Person person = (Person) obj;
Element name = doc.createElement("Name");
name.appendChild(doc.createTextNode(person.getName()));
item.appendChild(name);
Element age = doc.createElement("Age");
age.appendChild(doc.createTextNode(String.valueOf(person.getAge())));
item.appendChild(age);
} else if (obj instanceof Product) {
Product product = (Product) obj;
Element productName = doc.createElement("ProductName");
productName.appendChild(doc.createTextNode(product.getProductName()));
item.appendChild(productName);
Element price = doc.createElement("Price");
price.appendChild(doc.createTextNode(String.valueOf(product.getPrice())));
item.appendChild(price);
}
}
return convertDocumentToString(doc);
}
private static String convertDocumentToString(Document doc) {
TransformerFactory tf = TransformerFactory.newInstance();
Transformer transformer;
try {
transformer = tf.newTransformer();
StringWriter writer = new StringWriter();
transformer.transform(new DOMSource(doc), new StreamResult(writer));
return writer.getBuffer().toString();
} catch (TransformerException e) {
e.printStackTrace();
}
return null;
}
public static void main(String[] args) throws Exception {
List<Object> objects = new ArrayList<>();
objects.add(new Person("John", 30));
objects.add(new Product("Laptop", 999.99));
String xml = generateXML(objects);
System.out.println(xml);
}
}
class Person {
private String name;
private int age;
public Person(String name, int age) {
this.name = name;
this.age = age;
}
public String getName() {
return name;
}
public int getAge() {
return age;
}
}
class Product {
private String productName;
private double price;
public Product(String productName, double price) {
this.productName = productName;
this.price = price;
}
public String getProductName() {
return productName;
}
public double getPrice() {
return price;
}
}
原因:
解决方法:
通过以上方法,可以有效解决动态生成XML时遇到的问题,确保数据的完整性和准确性。
领取专属 10元无门槛券
手把手带您无忧上云