2013-12-03 4 views
0

У меня есть следующий XML-файл:org.json.JSONException: Дубликат ключ «х» в JAVA

<?xml version="1.0" encoding="UTF-8"?> 
<bpmn2:definitions> 
    <bpmn2:process id="defaultPackage.NewProcess2"> 
    <bpmn2:startEvent id="StartEvent_1" name="StartProcess"> 
     <bpmn2:outgoing>SequenceFlow_1</bpmn2:outgoing> 
    </bpmn2:startEvent> 
    <bpmn2:userTask id="UserTask_1" name="User Task 1"> 
     <bpmn2:incoming>SequenceFlow_1</bpmn2:incoming> 
     <bpmn2:outgoing>SequenceFlow_2</bpmn2:outgoing> 
    </bpmn2:userTask> 
    <bpmn2:userTask id="UserTask_2" name="User Task 2"> 
     <bpmn2:incoming>SequenceFlow_3</bpmn2:incoming> 
     <bpmn2:outgoing>SequenceFlow_4</bpmn2:outgoing> 
    </bpmn2:userTask> 
    <bpmn2:endEvent id="EndEvent_1" name="end event"> 
     <bpmn2:incoming>SequenceFlow_4</bpmn2:incoming> 
    </bpmn2:endEvent> 
    </bpmn2:process> 
    <bpmndi:BPMNDiagram id="BPMNDiagram_1"> 
    <bpmndi:BPMNPlane id="BPMNPlane_Process_1" bpmnElement="defaultPackage.NewProcess2"> 
     <bpmndi:BPMNShape id="BPMNShape_StartEvent_1" bpmnElement="StartEvent_1"> 
     <dc:Bounds height="36.0" width="36.0" x="60.0" y="210.0"/> 
     </bpmndi:BPMNShape> 
     <bpmndi:BPMNShape id="BPMNShape_UserTask_1" bpmnElement="UserTask_1"> 
     <dc:Bounds height="50.0" width="110.0" x="165.0" y="205.0"/> 
     </bpmndi:BPMNShape> 
     <bpmndi:BPMNShape id="BPMNShape_UserTask_2" bpmnElement="UserTask_2"> 
     <dc:Bounds height="50.0" width="110.0" x="550.0" y="203.0"/> 
     </bpmndi:BPMNShape> 
     <bpmndi:BPMNShape id="BPMNShape_EndEvent_1" bpmnElement="EndEvent_1"> 
     <dc:Bounds height="36.0" width="36.0" x="842.0" y="202.0"/> 
</bpmn2:definitions> 

Для каждого узла userTask определен под <bpmn2:process> </bpmn2:process> тегов, я хочу, чтобы получить theire положение, которое определяется й , y координаты, которые находятся в:

<bpmndi:BPMNShape id="BPMNShape_UserTask_1" bpmnElement="UserTask_1"> 
     <dc:Bounds height="50.0" width="110.0" x="165.0" y="205.0"/> 
     </bpmndi:BPMNShape> 

внутри <bpmndi:BPMNDiagram></bpmndi:BPMNDiagram> теги.

Я хочу добавить координаты x, y в строку JSON, которую я создал для генерации атрибутов каждого узла userTask.

Я попытался следующий код:

public static void generateChildNodesDefinitions(Node node) throws JSONException 
    { 
     if (node != null && node.hasChildNodes()) 
     { 

      jw.key("nodes").array(); 

      NodeList childnodelist = node.getChildNodes(); 

      for (int k = 0; k < childnodelist.getLength(); k++) 
      { 
       Node childn = childnodelist.item(k); 

       if (childn.hasAttributes() && childn.getNodeName() != "bpmn2:sequenceFlow") 
       { 

        ArrayList<String> list = (ArrayList<String>) jsonValues.get(childn.getNodeName()); 

        NamedNodeMap nnmchildnodes = childn.getAttributes(); 
        //per cdo nyje duhet te krijoj nje json object 
        jw.object(); 


        if (nnmchildnodes != null) 
        { 
         for (int j = 0; j < nnmchildnodes.getLength(); j++) 
         { 


          Node nodeUid = nnmchildnodes.item(j); 

          if (nodeUid.getNodeName().equals("id")) 
          { 
           String uid = new UID().toString(); 

           hmIDs.put(nodeUid.getNodeValue(), uid); 

           nodeUid.setNodeValue(uid); 

          } 



          jw.key(nodeUid.getNodeName()).value(nodeUid.getNodeValue()); 
         } 
        } 


        if (list != null && !list.isEmpty()) 
        { 
    List<String> myXarray = new ArrayList<String>(); 
         List<String> myYarray = new ArrayList<String>(); 

         ArrayList<String> bpmnElements = getElementAttributes("bpmndi:BPMNShape", "bpmnElement"); 
         for (int j = 0; j < bpmnElements.size(); j++) 
         { 
          String bpmnElement = bpmnElements.get(j); 
          if(childn.getNodeName().equals("bpmn2:userTask")){ 
           ArrayList<String> idUserTask = getIds("bpmn2:userTask"); 


           for(int l=0; l < idUserTask.size(); l++){ 
            if(idUserTask.get(l).equals(bpmnElement)){ 

             ArrayList<String> Xs = getElementAttributes ("dc:Bounds" , "x"); 
             ArrayList<String> Ys = getElementAttributes ("dc:Bounds" , "y"); 

             String x = Xs.get(j); 
             String y = Ys.get(j); 
             myXarray.add(x); 
             myYarray.add(y); 

            } 
            } 
          } 
         } 

             jw.key("x").value(myXarray); 
             jw.key("y").value(myYarray); 

} 
+0

в цикл InstEd из jw.key ("X") значение (х); и jw.key ("y"). значение (y); используйте jw.key (l) .value (x); и jw.key (l) .value (y); и проверить вывод – jos

+0

l имеет тип int, а ключ метода (String) в типе JSONWriter неприменим для аргументов \t (int) – user3025997

+0

Вы строите неправильную вещь. Что вам нужно сделать, так это построить отдельную карту для каждой пользовательской тары, вставить x и y в качестве значений в карту, а затем вставить карту в один основной список. Другие атрибуты могут быть вставлены в Карту по мере необходимости, тогда вся структура может быть «сериализована» в JSON. –

ответ

0

ошибка происходит потому, что вы устанавливаете ключ jw.key("x").value(x);jw.key("y").value(y); для каждой итерации будет как дубликат. .

так что лучше, чтобы установить значения х в массив, то jw.key("x").value(yourXarray);jw.key("y").value(yourYarray);

List<String> yourXarray = new ArrayList<String>(); 
for(int l=0; l<idUserTask.size(); l++){ 
    if(idUserTask.get(l).equals(bpmnElement)){ 
     ArrayList<String> Xs = getElementAttributes ("dc:Bounds" , "x"); 
     String x = Xs.get(j); 
     yourXarray.add(x) 
    }} 
jw.key("x").value(yourXarray); 
+0

значения x уже попали в массив: ** ArrayList Xs = getElementAttributes («dc: Bounds», «x»); ** Я понимаю, что проблема в том, что для каждой итерации она дублирует x, но я не знаю, как разрешить это – user3025997

+0

Я отредактировал мой ответ, пожалуйста, проверьте – jos

+0

ту же ошибку .... Дублирующий ключ «x» – user3025997

Смежные вопросы