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"));