Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/330.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何使用JDOM将JTree数据导出为XML文件_Java_Swing_Jtree_Jdom 2 - Fatal编程技术网

Java 如何使用JDOM将JTree数据导出为XML文件

Java 如何使用JDOM将JTree数据导出为XML文件,java,swing,jtree,jdom-2,Java,Swing,Jtree,Jdom 2,我有一个jtree,需要将每个子级元素另存为xml,我尝试使用下面的代码来实现它,但它在转换xml文档的数字数据时出错 错误消息: Exception in thread "AWT-EventQueue-0" org.jdom2.IllegalNameException: The name "1001" is not legal for JDOM/XML elements: XML name '1001' cannot begin with the character "1". at o

我有一个jtree,需要将每个子级元素另存为xml,我尝试使用下面的代码来实现它,但它在转换xml文档的数字数据时出错

错误消息:

Exception in thread "AWT-EventQueue-0" org.jdom2.IllegalNameException: The name "1001" is not legal for JDOM/XML elements: XML name '1001' cannot begin with the character "1".
    at org.jdom2.Element.setName(Element.java:227)
    at org.jdom2.Element.<init>(Element.java:161)
    at org.jdom2.Element.<init>(Element.java:173)
线程“AWT-EventQueue-0”org.jdom2.IllegalNameException中的异常:名称“1001”对于JDOM/XML元素不合法:XML名称“1001”不能以字符“1”开头。
位于org.jdom2.Element.setName(Element.java:227)
位于org.jdom2.Element。(Element.java:161)
位于org.jdom2.Element。(Element.java:173)
错误指向,Element el=新元素(node.toString())

错误的原因可能是什么

// Save the XML file which has been modified.
    private void saveMsg(TreeModel model) {     
            FileFilter filter = new FileNameExtensionFilter("xml files (*.xml)","xml");
            fileChooser.addChoosableFileFilter(filter);
            fileChooser.setCurrentDirectory(new File(""));
            fileChooser.setDialogTitle("Save XML file");            

            if (fileChooser.showSaveDialog(frame) == JFileChooser.APPROVE_OPTION){
                //File file = fileChooser.getSelectedFile();
                TreeModel tModel = xmlTree.getModel();              
                int childCount = tModel.getChildCount(tModel.getRoot());
                logger.info("Messages to be sent : " + childCount);

                for(int i=0; i<childCount; i++){
                    // go through each xml messages.
                    jtree2Xml(tModel.getChild(tModel.getRoot(), i)); 
                }                   
            }       
    } // End of Save XML file.  


    private void jtree2Xml(Object node) {           
            Document doc = new Document();          
            Element root = createTree(doc, xmlTree.getModel(), node);               
            doc.addContent(root);           
            XMLOutputter out = new XMLOutputter(Format.getPrettyFormat());              
            try {
                out.output(doc, System.out);
                out.output(doc, new FileWriter(file));
                System.out.println("Saved the xml file...");
            } catch (IOException e) {
                e.printStackTrace();
                logger.error("Xml file saving error : ");
            }
    } // End of the method.



    // Read through the document's elements.
    private static Element createTree(Document doc, TreeModel model, Object node) {         
        **Element el = new Element(node.toString());**          
        for (int i = 0; i < model.getChildCount(node); i++) {           
            Object child = model.getChild(node, i);
            el.addContent(createTree(doc, model, child));           
        } // End of the while loop.
        return el;
    }
//保存已修改的XML文件。
私有void saveMsg(TreeModel模型){
FileFilter filter=newfilenamextensionfilter(“xml文件(*.xml)”,“xml”);
fileChooser.addChoosableFileFilter(过滤器);
fileChooser.setCurrentDirectory(新文件(“”);
setDialogTitle(“保存XML文件”);
if(fileChooser.showsavedilog(frame)=JFileChooser.APPROVE\u选项){
//File File=fileChooser.getSelectedFile();
TreeModel tModel=xmlTree.getModel();
int childCount=tModel.getChildCount(tModel.getRoot());
logger.info(“要发送的消息:“+childCount”);

对于(int i=0;i,来自JDOM的消息非常清楚。元素名称不能以字符“1”开头。这来自XML规范

您应该为元素使用一个固定的名称,并将JTree节点放到属性中

 <jtreenode value="1001"/>


Rolfl

为了更快地获得更好的帮助,请发布一个。@Andrew Thompson,当然我觉得奇怪,当您没有发布SSCCE并且现在没有使用SSCCE进行编辑时,您应该回答“当然”。您能看到createTree()的逻辑中有任何误导点吗?读取jtree节点并将其转换为xml文件的逻辑似乎不正确。