簡體   English   中英

將JTree轉換為XML

[英]Convert JTree to XML

我看過很多關於如何將XML讀入JTree的文章,但是很少有關於如何從JTree創建XML的文章。 有人可以幫我一個簡單的方法嗎? 我看過一個看起來像的例子:

 XMLEncoder e = new XMLEncoder(
                new BufferedOutputStream(new FileOutputStream(f.toString())));
        e.writeObject(o);
        e.close();

..但是我無法使它工作; 它返回一個XML文件,但它並不十分正確,如下所示:

<java version="1.6.0_17" class="java.beans.XMLDecoder"> 
 <object class="javax.swing.JTree"> 
  <object class="javax.swing.tree.DefaultTreeModel"> 
   <object class="javax.swing.tree.DefaultMutableTreeNode"> 
    <void property="userObject"> 

..等等,但是那里沒有我的數據。

(PS:請溫柔,我新到Java!)

XMLEncoder是用於將bean編碼為文本的通用實用程序。 我認為這不適合您的情況。

假設我很了解您的需求,那么我寫了一段代碼即可完成這項工作。 您只需要將樹模型作為參數傳遞給toXml方法。 請注意,這只是草稿; 您可能希望以不同的方式處理異常,並以不同的方式管理轉換參數。 更重要的是,您可以操縱遞歸createTree方法,以更改每個樹節點創建的XML節點的結構。

public static String toXml(TreeModel model) throws ParserConfigurationException, TransformerException {
    DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
    DocumentBuilder builder = factory.newDocumentBuilder();
    DOMImplementation impl = builder.getDOMImplementation();

    // Build an XML document from the tree model
    Document doc = impl.createDocument(null,null,null);
    Element root = createTree(doc, model, model.getRoot());
    doc.appendChild(root);

    // Transform the document into a string
    DOMSource domSource = new DOMSource(doc);
    TransformerFactory tf = TransformerFactory.newInstance();
    Transformer transformer = tf.newTransformer();
    transformer.setOutputProperty(OutputKeys.OMIT_XML_DECLARATION, "yes");
    transformer.setOutputProperty(OutputKeys.METHOD, "xml");
    transformer.setOutputProperty(OutputKeys.ENCODING,"UTF-8");
    transformer.setOutputProperty("{http://xml.apache.org/xslt}indent-amount", "4");
    transformer.setOutputProperty(OutputKeys.INDENT, "yes");
    StringWriter sw = new StringWriter();
    StreamResult sr = new StreamResult(sw);
    transformer.transform(domSource, sr);
    return sw.toString();
}

private static Element createTree(Document doc, TreeModel model, Object node) {
    Element el = doc.createElement(node.toString());
    for(int i=0;i<model.getChildCount(node);i++){
        Object child = model.getChild(node, i);
        el.appendChild(createTree(doc,model,child));
    }
    return el;
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM