我想创建一个新的XML文档。我使用一种方法来创建我的新xml doc的根元素,这个方法返回我的根元素。
比我创建另一个方法将子项添加到第一个方法返回的根元素。
问题是,当我单独使用这两个方法时,我没有得到任何结果,但是当我只使用一种方法来完成这两种方法的所有工作时,我得到了预期的结果。 这是正常工作时的代码:
public static Node setRootElement (Document bpmn_doc){
Element rootElement = bpmn_doc.createElement("bpmn2:definitions");
Element processNode = bpmn_doc.createElement("bpmn2:process");
processNode.setAttribute("id", "Definitions_1");
rootElement.appendChild(processNode);
System.out.println(rootElement.getNodeName());
System.out.println(processNode.getAttribute("id"));
return rootElement;
}
结果是:
bpmn2:definitions
Definitions_1
当我使用两种不同的方法以这种方式完成这项工作时:
public static Node setRootElement (Document bpmn_doc){
Element rootElement = bpmn_doc.createElement("bpmn2:definitions");
return rootElement;
}
public static Node appendProcessNode(Document bpmn_doc) {
Node rootElement = setRootElement(bpmn_doc);
Element processNode = bpmn_doc.createElement("bpmn2:process");
processNode.setAttribute("id", "Definitions_1");
rootElement.appendChild(processNode);
System.out.println(rootElement.getNodeName());
System.out.println(processNode.getAttribute("id"));
return processNode ;
}
我没有得到任何结果。
这是调用方法的地方:
public static void main(String[] args) throws Exception {
appendProcessNode(buildTheDocument());
}
其中buildTheDocument()是创建新xml doc的方法:
public static Document buildTheDocument () throws ParserConfigurationException, SAXException, IOException{
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
DocumentBuilder builder = factory.newDocumentBuilder();
Document bpmn_doc = builder.newDocument(); //Krijoj nje document te ri ku do ruaj versionin BPMN
return bpmn_doc;
}
请知道如何解决这个问题?
答案 0 :(得分:0)
你的2个程序不一样! 在第二个示例中,您已使用
Node rootElement
在您使用的第一个示例中:
Element rootElement
我希望它有所帮助!
答案 1 :(得分:0)
反正 我不会像你用2种不同的方法那样进行。而是试试这个。
public static Node setRootElement (Document bpmn_doc){
Element rootElement = bpmn_doc.createElement("bpmn2:definitions");
return rootElement;
}
public static Node appendProcessNode(Document bpmn_doc) {
Node rootElement = setRootElement(bpmn_doc);
NodeList processNodes = bpmn_doc.getElementByTagName("bpmn2:process");
Node processNode = processNode.item(0);// add more control to make sure the nodelist is not empty
processNode.setAttribute("id", "Definitions_1");
rootElement.appendChild(processNode);
System.out.println(rootElement.getNodeName());
System.out.println(processNode.getAttribute("id"));
}
我怀疑你从第一个方法得到的节点没有任何对文件对象bpmn2_doc的实际节点的引用! 我没有测试过代码,但是检查javadoc以找出对象Element / Node可用的更多方法。
答案 2 :(得分:0)
我解决了我的问题! 我保留了我创建的两种方法,但在第二种方法上略有不同。我没有将我创建的processNode附加到此方法中的根元素
public static Node appendProcessNode(Document bpmn_doc) {
NodeList processNodes = bpmn_doc.getElementByTagName("bpmn2:process");
Node processNode = processNode.item(0);
processNode.setAttribute("id", "Definitions_1");
}
相反,我创建了另一种方法,并在这里完成工作:
public static createXml (Document bpmn_doc){
Node rootElement = setRootElement(bpmn_doc);
Node processNode = createProcessNode(bpmn_doc);
rootElement.appendChild(processNode);
}