我有一個XML文檔看起來像這樣:如何使用現有屬性創建新的XML DOC?
<?xml version="1.0" encoding="UTF-8"?>
<model>
<id>_1</id>
<nodes>
<id>_2</id>
<stencil>TASK</stencil>
</nodes>
<nodes>
<id>_3</id>
<stencil>TASK</stencil>
</nodes>
</model>
我要創建與節點從第一文檔的屬性另一個XML文檔。對於新的文檔,我必須創建一個稱爲「定義」的父節點 。我不得不在第一個文檔中創建「模型」節點,而是在具有 屬性「id」的新文檔中創建一個「process」節點,該值與模型的「id」子節點的內容相同。對於第一個doc中的每個「節點」節點,如果它們的「模板」子節點內容等於「TASK」,我在新的xml文檔中創建一個「任務」節點。
<?xml version="1.0" encoding="UTF-8"?>
<definitions>
<process id="_1">
<task id="_2">
</task>
<task id="_3">
</task>
</process>
</definitions>
要做到這一點,我創建三個類的定義,流程和任務:
public class Definitions {
public Process extractProcess(Document simpleXml_doc) throws XPathExpressionException{
Process p = new Process();
p.setProcess("process");
XPath xPath = XPathFactory.newInstance().newXPath();
XPathExpression xPathEx1 = xPath.compile("/model/id");
Node n1 = (Node) xPathEx1.evaluate(simpleXml_doc, XPathConstants.NODE);
p.setIdProcess(n1.getTextContent());
return p;
}
}
public class Process {
private String process;
public String getProcess(){
return process;
}
public void setProcess(String process){
this.process = process;
}
private String idProcess;
public String getIdProcess(){
return idProcess;
}
public void setIdProcess(String idProcess){
this.idProcess = idProcess;
}
public ArrayList<Task> extractTasks(Document firstXml_doc) throws XPathExpressionException{
ArrayList<Task> taskList = new ArrayList<>();
XPath xPath = XPathFactory.newInstance().newXPath();
XPathExpression xPathEx1 = xPath.compile("/model/nodes/stencil");
NodeList nl1 = (NodeList) xPathEx1.evaluate(simpleXml_doc, XPathConstants.NODESET);
for(int index=0; index<nl1.getLength(); index++){
if(nl1.item(index).getTextContent().equals("TASK")){
Task t = new Task();
t.setTask("task");
XPathExpression xPathEx2 = xPath.compile("/model/nodes/id");
NodeList nl2 = (NodeList) xPathEx2.evaluate(simpleXml_doc, XPathConstants.NODESET);
t.setIdTask("_" + nl2.item(index).getTextContent());
taskList.add(t);
}
}
return taskList;
}
}
public class Task {
private String task;
public String getTask(){
return task;
}
public void setTask(String task){
this.task = task;
}
//do krijoj properties per atributet e elementit task
private String idTask;
private String nameTask;
public String getIdTask(){
return idTask;
}
public void setIdTask(String idTask){
this.idTask = idTask;
}
}
我只是想知道這是否是定義各個類別的正確方法。 任何人都可以告訴我用這個 類創建和填充新文檔的節點的方法嗎? 我與DOM解析器一起使用,我知道如何創建節點並填充屬性值,但我一直在單個類中完成這項工作,而不是對 元素使用不同的類。
考慮到您對問題的定義,我會將其作爲純粹的過程代碼來處理:編寫一些內容來處理輸入文檔,提取所需的信息,並將結果值作爲新的XML文檔輸出,而不是構建完整的你已經開始做的特定於應用程序的數據模型。或者只寫一個表達你想要的轉換的XSLT樣式表。 – keshlam