/** * xml-test * * @author : Mr. Lee * @date : 2024-04-18 11:11 **/ import java.io.ByteArrayOutputStream; import java.io.File; import java.io.IOException; import java.io.StringWriter; import java.util.Enumeration; import java.util.logging.Level; import java.util.logging.Logger; import javax.swing.tree.DefaultTreeModel; import javax.swing.tree.TreeModel; import javax.swing.tree.TreeNode; import javax.xml.parsers.DocumentBuilderFactory; import javax.xml.parsers.ParserConfigurationException; import javax.xml.transform.OutputKeys; import javax.xml.transform.Transformer; import javax.xml.transform.TransformerConfigurationException; import javax.xml.transform.TransformerException; import javax.xml.transform.TransformerFactory; import javax.xml.transform.dom.DOMSource; import javax.xml.transform.stream.StreamResult; import org.w3c.dom.Document; import org.w3c.dom.Element; //要将tree结构的List lists转换为XML,可以使用Java的XML编解码库,如DOM或者JAXB。这里以DOM为例,以下是示例代码: import javax.xml.parsers.DocumentBuilder; import java.util.ArrayList; import java.util.List; public class TreeToXmlConverter { public static void main(String[] args) { // 创建示例数据 List<NodeData> lists = new ArrayList<>(); NodeData nodeData1 = new NodeData("Node", "Value"); NodeData nodeData2 = new NodeData("Node2", "Value2"); NodeData nodeData3 = new NodeData("Node3", "Value3"); NodeData nodeData4 = new NodeData("Node4", "Value"); NodeData nodeData5 = new NodeData("Node5", "Value"); NodeData nodeData6 = new NodeData("Node6", "Value"); NodeData nodeData7 = new NodeData("Node61", "Value"); NodeData nodeData8 = new NodeData("Node61", "Value"); NodeData nodeData9 = new NodeData("Node61", "Value"); nodeData3.getList().add(nodeData4); nodeData3.getList().add(nodeData5); nodeData2.getList().add(nodeData6); nodeData6.getList().add(nodeData7); nodeData6.getList().add(nodeData8); nodeData6.getList().add(nodeData9); nodeData1.getList().add(nodeData2); nodeData1.getList().add(nodeData3); lists.add(nodeData1); // 转换为XML Document document = convertToXml(lists); String s = docToString(document); System.out.println("s = " + s); // 输出XML outputXml(document); // String xml = convertToXml(nodeData1); // System.out.println("xml = " + xml); } private static Document convertToXml(List<NodeData> lists) { try { DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance(); DocumentBuilder builder = factory.newDocumentBuilder(); Document document = builder.newDocument(); Element root = createNodeElement(document, lists.get(0)); document.appendChild(root); for (int i = 1; i < lists.size(); i++) { NodeData nodeData = lists.get(i); Element nodeElement = createNodeElement(document, nodeData); root.appendChild(nodeElement); } return document; } catch (ParserConfigurationException e) { e.printStackTrace(); } return null; } private static Element createNodeElement(Document document, NodeData nodeData) { Element nodeElement = document.createElement(nodeData.getName()); if (nodeData.getList().isEmpty()) { nodeElement.setTextContent(nodeData.getValue()); // 只给没有子节点的节点赋值 } else { for (NodeData childNode : nodeData.getList()) { Element childElement = createNodeElement(document, childNode); nodeElement.appendChild(childElement); } } return nodeElement; } private static void outputXml(Document document) { try { TransformerFactory transformerFactory = TransformerFactory.newInstance(); Transformer transformer = transformerFactory.newTransformer(); DOMSource source = new DOMSource(document); StreamResult result = new StreamResult(System.out); transformer.transform(source, result); } catch (TransformerException e) { e.printStackTrace(); } } /** /** * org.w3c.dom.Document 转换为 String * * @param * @return String */ public static String docToString(Document doc) { String docStr = ""; if(doc!=null){ try{ TransformerFactory transformerFactory = TransformerFactory.newInstance(); Transformer transformer = transformerFactory.newTransformer(); transformer.setOutputProperty("encoding", "UTF-8"); ByteArrayOutputStream outputStream = new ByteArrayOutputStream(); transformer.transform(new DOMSource(doc), new StreamResult(outputStream)); //docStr = outputStream.toString(); docStr = outputStream.toString("UTF-8"); System.out.println("\n********************** 【org.w3c.dom.Document对象转XML字符串内容:】 **********************\n"); }catch(Exception e){ e.printStackTrace(); } } return docStr; } // 定义节点数据类 static class NodeData { private String name; private String value; private List<NodeData> list; public NodeData(String name, String value) { this.name = name; this.value = value; this.list = new ArrayList<>(); } public String getName() { return name; } public void setName(String name) { this.name = name; } public String getValue() { return value; } public void setValue(String value) { this.value = value; } public List<NodeData> getList() { return list; } } }
将tree结构的数据转为xml
最新推荐文章于 2024-08-03 17:04:25 发布