Java JDOM中没有DOCTYPE声明错误

Java JDOM中没有DOCTYPE声明错误,java,jdom,jdom-2,Java,Jdom,Jdom 2,我的代码在下面 Document convertDataToXML(ArrayList<MyData> oMyDataCollection) { try { //get the Input template file location String sExportXMLTemplate = ""; XPathFactory xpfacFile = XPathFactory.insta

我的代码在下面

Document convertDataToXML(ArrayList<MyData> oMyDataCollection) {
    try {

            //get the Input template file location          
            String sExportXMLTemplate = "";
            XPathFactory xpfacFile = XPathFactory.instance();
            XPathExpression<Element> xElementsLoc = xpfacFile.compile(IssueExchangerXPathConstants.EXPORT_XML_TEMPLATE, Filters.element());
            List<Element> elementsLoc = xElementsLoc.evaluate(xConfigurationDocument);          
            for (Element xElem : elementsLoc) {     
                logger.trace(xElem.getText());
                logger.trace("getXSLTFileName ends");
                sExportXMLTemplate =xElem.getText();
                break;
            }           
            DocumentBuilderFactory dbFactory = DocumentBuilderFactory.newInstance();
            DocumentBuilder dBuilder;
            dBuilder = dbFactory.newDocumentBuilder();
            org.w3c.dom.Document doc = dBuilder.parse(new File("C://Folder/Template.xml"));
            DOMBuilder domBuilder = new DOMBuilder();
            //Document xIssuesMappingXMLInternal=null;
            Document xIssuesMappingXMLInternal;
            xIssuesMappingXMLInternal = domBuilder.build(doc);              
            XPathFactory xpfac = XPathFactory.instance();       
            XPathExpression<Element> xElements = xpfac.compile(ExportXMLConstants.ISSUES_EXPORT,Filters.element(),null);
            List<Element> elements = xElements.evaluate(xIssuesMappingXMLInternal);
            for (Element xIssuesParent : elements) {
              System.out.println(xIssuesParent.getName());
              Element xCloneIssue = null ; 
              int iCounter=1;
              for (Element xIssueChild : xIssuesParent.getChildren())
              {
                  xCloneIssue = xIssueChild.clone();
                  xCloneIssue.detach();
                  xIssueChild.detach(); //remove from parent
                  break; //expecting only one node here..
              }
            //LOOP THE COLLECTION                
             Element xClonedCopy = xCloneIssue.clone();
             for (RTCData oMyDataCollection : oMyDataCollectionCollection) {                 
                 xCloneIssue.getAttribute(ExportXMLConstants.ISSUE_ID_ATTR_EXPORT).setValue("ISSUE-"+iCounter);
                //fill other nodes
                 Element xNewID = xCloneIssue.getChild(ExportXMLConstants.ISSUE_NEW_ID_EXPORT);
                 xNewID.setText(oMyDataCollection.getsExchangePartnerID());                  
                 Element xID = xCloneIssue.getChild(ExportXMLConstants.ISSUE_ID_EXPORT);
                 xID.setText(oMyDataCollection.getsID_Issue());                  
                 Element xSummary = xCloneIssue.getChild(ExportXMLConstants.ISSUE_SUMMARY_EXPORT);
                 xSummary.setText(oMyDataCollection.getsSummary_ExchangeInfo());                     
                 Element xStatus = xCloneIssue.getChild(ExportXMLConstants.ISSUE_STAUTS_EXPORT);
                 xStatus.setText(oMyDataCollection.getsStatus_Issue());                  
                 Element xComments = xCloneIssue.getChild(ExportXMLConstants.ISSUE_COMMENTS_EXPORT);
                 if (xComments != null)
                 {
                     Element xComment = xComments.getChild(ExportXMLConstants.ISSUE_COMMENT_EXPORT);                         
                     xComment.setText(oMyDataCollection.getsFeedback());
                 }
                 xIssuesParent.addContent(xCloneIssue);
                 xCloneIssue=xClonedCopy.clone();
                 iCounter++;
              }
            }
            XMLOutputter xmlOutput = new XMLOutputter();                 
            // display nice nice
            xmlOutput.setFormat(Format.getPrettyFormat());
            xmlOutput.output(xIssuesMappingXMLInternal, new FileWriter("c:\\temp\\OutputFile.xml"));
            //logger.info(xmlOutput.outputString(xIssuesMappingXMLInternal));
            //logger.info(xIssuesMappingXMLInternal.toString());
            return xIssuesMappingXMLInternal;
    } catch (Exception e) {
        logger.fatal(e);
    }
    return null;
}
这里我将有多个节点

我的期望是,该文档将返回整个问题节点

此外,我不想在这里使用任何“doctype”。这是一个简单的XML

我正在使用JavaSE1.6和JDOM2.0.4

任何帮助都将不胜感激


非常感谢

我不知道为什么会出现DOCTYPE问题。稍后我将尝试复制它。在此期间,当您更改行时,它可能会消失:

        DocumentBuilderFactory dbFactory = DocumentBuilderFactory.newInstance();
        DocumentBuilder dBuilder;
        dBuilder = dbFactory.newDocumentBuilder();
        org.w3c.dom.Document doc = dBuilder.parse(
               new File("C://Folder/Template.xml"));
        DOMBuilder domBuilder = new DOMBuilder();
        //Document xIssuesMappingXMLInternal=null;
        Document xIssuesMappingXMLInternal;
        xIssuesMappingXMLInternal = domBuilder.build(doc);              

使用JDOM时不需要使用DOM中间文档

编辑:(根据以上评论) 真正的问题不是一个问题,而是“只是工作”。您所看到的结果是:您只是没有复制/粘贴[]大括号,这将使这一点更加明显,我也不会感到困惑


一切正常,如果希望XML文档的输出为字符串值(而不仅仅是文档的toString()值),请使用

谢谢。让我试着给你一个反馈。我还试图返回
文档
,因为我想在内存中使用它
文档
使用XSLTTED将其转换为另一种格式,结果仍然相同
[文档:无DOCTYPE声明,根为[Element:]
使用JDOM 2.0.5尝试,结果仍然相同:-(请更新您的问题并为错误添加完整的stacktrace,并在失败的代码中标记准确的行…感谢您,如果
文档
文档,则返回值:无DOCTYPE声明,Root是元素
,我无法进一步使用它。作为一种解决方法,我将此
文档
保存到一个文件,然后读取该文件而不是传递文档对象编辑了下面的答案。您是否能够解决此问题?我遇到了相同的错误,无法使用该文档。在这一点之后,我没有尝试过,因为我求助于解决方法
        DocumentBuilderFactory dbFactory = DocumentBuilderFactory.newInstance();
        DocumentBuilder dBuilder;
        dBuilder = dbFactory.newDocumentBuilder();
        org.w3c.dom.Document doc = dBuilder.parse(
               new File("C://Folder/Template.xml"));
        DOMBuilder domBuilder = new DOMBuilder();
        //Document xIssuesMappingXMLInternal=null;
        Document xIssuesMappingXMLInternal;
        xIssuesMappingXMLInternal = domBuilder.build(doc);              
        SAXBuilder saxBuilder = new SAXBuilder();
        Document xIssuesMappingXMLInternal = saxBuilder.build(
               new File("C://Folder/Template.xml"));