-1

我想在 Java 运行时使用 JDOM 从模板创建 XML。

下面是一个示例模板

<PARENT>
<ISSUES>
<ISSUE id="ISSUE-X">
<SUMMARY></SUMMARY>
<CATEGORY></CATEGORY>
..
</ISSUE>
</ISSUES>
</PARENT>

我想使用 Java + JDOM 加载这个模板文件并得到以下内容

<PARENT>
<ISSUES>
<ISSUE id="ISSUE-1">
<SUMMARY>Test 1</SUMMARY>
<CATEGORY>Cat 1</CATEGORY>      
 ..
</ISSUE>
<ISSUE id="ISSUE-2">
<SUMMARY>Test 2</SUMMARY>
<CATEGORY>Cat 2</CATEGORY>
..
</ISSUE>

</ISSUES>
</PARENT>

理想情况下,我想创建更多 ISSUE 节点并从数据库中填充数据并保存到文件

我认为我可以使用模板的原因是因为会有额外的节点<ISSUE>,我需要从数据库中填充这些节点,并且我认为通过模板填充它会快得多

有人可以指导我如何使用 JDOM 在 Java 中完成这项工作吗?

注意:此模板将遵循我未在此处提供的 XSD。

提前致谢

编辑:下面的代码片段

String sXMLPath = "D:\\WS\\issue_sample.xml";
DocumentBuilderFactory dbFactory = DocumentBuilderFactory.newInstance();
DocumentBuilder dBuilder;
dBuilder = dbFactory.newDocumentBuilder();
org.w3c.dom.Document doc = dBuilder.parse(new File(sXMLPath));
DOMBuilder domBuilder = new DOMBuilder();
Document xConfigurationDocument;
xConfigurationDocument = domBuilder.build(doc);

XPathFactory xpfac = XPathFactory.instance();       
XPathExpression<Element> xElements = xpfac.compile("//ns:MY-ISSUE/ns:ISSUES",Filters.element(),null,Namespace.getNamespace("ns", "http://www.myns.net/schemas/issue"));
List<Element> elements = xElements.evaluate(xConfigurationDocument);
for (Element xIssuesParent : elements) {
  System.out.println(xIssuesParent.getName());  
  Element xCloneIssue = null ;  
  for (Element xIssueChild : xIssuesParent.getChildren())
  {
      xCloneIssue = xIssueChild.clone();
      System.out.println(xIssueChild.getName());
      xIssuesParent.removeContent(xIssueChild);
  }

  for (int i = 1; i < 3; i++) {         
      xCloneIssue.setAttribute("ID", "ISSUE-" + i);
      xIssuesParent.addContent(xCloneIssue);
  }

}
XMLOutputter xmlOutput = new XMLOutputter(); 
// display nice nice
xmlOutput.setFormat(Format.getPrettyFormat());
xmlOutput.output(xConfigurationDocument, new FileWriter("c:\\temp\\OutputFile.xml"));

我正在一个示例应用程序中尝试这个

我面临的问题是,在for (int i = 1; i < 3; i++)第一次之后的 for 循环()中,我总是收到以下错误The Content already has an existing parent "ISSUES"

显然我缺少的是一个新的克隆。

我的问题是我怎样才能总是得到一个元素的句柄并不断添加到父元素

4

1 回答 1

0

如果它会遵守XSD,那么请查看org.jdom.input.DOMBuilder,您可以将 DTD 解析到其中。

于 2013-05-22T04:33:40.677 回答