使用Java和JDOM在内存中填充模板xml?

时间:2013-05-22 03:53:38

标签: java jdom

我想使用JDOM在Java运行时期间从模板创建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节点,并从DB&amp;中填充数据。保存到文件

我以为我可以使用模板的原因是因为<ISSUE>下会有额外的节点,我需要从db&amp;正在考虑填写这个通过模板会更快

有人可以指导我如何使用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循环(for (int i = 1; i < 3; i++))中,我总是收到以下错误The Content already has an existing parent "ISSUES"

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

我的问题是我怎么能总是得到一个元素的句柄并继续添加到父

1 个答案:

答案 0 :(得分:0)

如果它将遵循 XSD ,那么请查看 org.jdom.input.DOMBuilder ,您可以将DTD解析为。