2014-05-28 2 views
0

Я пытаюсь изменить XML-документ с помощью JDOM, проблема в том, что в файле ничего не меняется.Изменение XML с помощью JDOM

Я искал в Интернете, чтобы изменить файл, и на любом сайте объясняется, как сохранить файл.

Я хотел бы, чтобы вы сказали мне, что я делаю неправильно, или, если есть другой способ.

код Метод:

public void ocuparPlazaParking(){ 

     //Se crea un SAXBuilder para poder parsear el archivo 
     SAXBuilder builder = new SAXBuilder(); 
     File xmlFile = new File("C:/Users/Alejandro/Parking/parking.xml"); 

     try 
     {  
      Document document = (Document) builder.build(xmlFile); 

      //Se obtiene la raiz 'parking' 
      Element elementoParking = document.getRootElement(); 


      //Obtengo las plantas 
      List listadePlantas = elementoParking.getChildren("planta"); 
      for (int i=0; i < listadePlantas.size(); i++){ 

       Element elementoPlanta = (Element) listadePlantas.get(i);  

       //Obtengo las filas 
       List listadeFilas = elementoPlanta.getChildren("fila"); 
       for (int j = 0; j < listadeFilas.size(); j++){ 
        //obtengo la fila 
        Element elementoFila = (Element) listadeFilas.get(j);   


        //Obtengo los bloques 

        List listadeBloques = elementoFila.getChildren("bloque"); 
        for (int k = 0; k < listadeBloques.size(); k++) { 

         Element elementoBloque = (Element) listadeBloques.get(k); 


         List listadeElementos = elementoBloque.getChildren("elemento"); 
         for (int l = 0; l < listadeElementos.size(); l++){ 
          Element elementoElemento = (Element) listadeElementos.get(l); 

          if(elementoElemento.getChildText("numero").equals("1003")){ 

           elementoElemento.getChild("estado").setText("ocupada"); 
          } 

         }  
        } 
       } 
      } 
     } 

     catch (IOException io) { 
      System.out.println(io.getMessage()); 
     }catch (JDOMException jdomex) { 
      System.out.println(jdomex.getMessage()); 
     }   
    } 

И DTD в XML является:

<?xml version="1.0" encoding="UTF-8"?> 
<!ELEMENT parking (planta+)> 
<!ATTLIST parking nombreParking CDATA #REQUIRED> 
<!ATTLIST parking direccion CDATA #REQUIRED> 
<!ATTLIST parking poblacion CDATA #REQUIRED> 
<!ATTLIST parking pais CDATA #IMPLIED> 

<!ELEMENT planta (fila+)> 
<!ATTLIST planta numPlazas CDATA #REQUIRED> 
<!ATTLIST planta numeroPlanta CDATA #REQUIRED> 
<!ATTLIST planta tamano CDATA #IMPLIED> 

<!ELEMENT fila (bloque+)> 
<!ATTLIST fila altoFila CDATA #REQUIRED> 
<!ATTLIST fila anchoFila CDATA #REQUIRED> 

<!ELEMENT bloque (elemento+)> 
<!ATTLIST bloque anchoBloque CDATA #REQUIRED> 

<!ELEMENT elemento (tipo,subtipo,estado,posicion,longitud,numero)> 
<!ELEMENT tipo (#PCDATA)> 
<!ELEMENT subtipo (#PCDATA)> 
<!ELEMENT estado (#PCDATA)> 
<!ELEMENT longitud (#PCDATA)> 
<!ELEMENT posicion (#PCDATA)> 
<!ELEMENT numero (#PCDATA)> 
+0

Вы читаете xml-файл в DOM и изменяете DOM. Я не вижу, где вы записываете измененный DOM обратно в файл. Вы в какой-то момент меняете файл? – prabugp

+0

Я не знаю, как сохранить изменения в том же xml – Cence

+1

@prabugp - обратите внимание, что пользователь загружается в JDOM, а не DOM ... b ut, вы правы, что его «не сохраняют обратно». – rolfl

ответ

5

Энди предложил правильное решение, но по неправильной технологии.

Вы загружаете документ XML в модель JDOM в памяти. Вы меняете содержимое в модели памяти, но вы не пишете модель на диск .... и что Yous должен use XMLOutputter

Вы хотите добавить следующее:

XMLOutputter xmlout = new XMLOutputter(); 
try (FileOutputStream fileout = new FileOutputStream("C:/Users/Alejandro/Parking/parking.MODIFIED.xml")) { 
    xmlout.output(document, fileout); 
} 

Также , ваш тег указывает, что вы используете JDOM2. В этом случае, вы должны использовать списки дженериков с поддержкой ... так что ваш код должен выглядеть так (обратите внимание на отсутствие литья ...):

 //Obtengo las plantas 
     List listadePlantas = elementoParking.getChildren("planta"); 
     for (int i=0; i < listadePlantas.size(); i++){ 

      Element elementoPlanta = (Element) listadePlantas.get(i); 

Если/может быть:

 //Obtengo las plantas 
     for (Element elementoPlanta : elementoParking.getChildren("planta")){ 

(вы импортирования org.jdom.Element или org.jdom2.* ...?)

Кроме того, в вашем посте вы указываете, что вы искали в Интернете .... в топ-три результата для Google Searching 'JDOM Save File' все хорошо, но в последнее время complete tutorial was put together, и у него есть section dedicated to the XMLOutputter

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

  • Нет связанных вопросов^_^