我想使用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"
显然我缺少的是一个新的克隆。
我的问题是我怎么能总是得到一个元素的句柄并继续添加到父
答案 0 :(得分:0)
如果它将遵循 XSD ,那么请查看 org.jdom.input.DOMBuilder ,您可以将DTD解析为。