Java 使用JDOM修改XML

Java 使用JDOM修改XML,java,xml,dtd,jdom-2,Java,Xml,Dtd,Jdom 2,我试图用JDOM修改XML文档,问题是它不会改变文件中的任何内容 我一直在互联网上搜索修改该文件,并在任何网站上解释如何保存该文件 我希望你告诉我我做错了什么,或者是否有其他方法 方法代码为: public void ocuparPlazaParking(){ //Se crea un SAXBuilder para poder parsear el archivo SAXBuilder builder = new SAXBuilder(); F

我试图用JDOM修改XML文档,问题是它不会改变文件中的任何内容

我一直在互联网上搜索修改该文件,并在任何网站上解释如何保存该文件

我希望你告诉我我做错了什么,或者是否有其他方法

方法代码为:

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() );
        }           
    }   
公共广场停车场(){
//这是一个建筑工地
SAXBuilder=新SAXBuilder();
文件xmlFile=新文件(“C:/Users/Alejandro/Parking/Parking.xml”);
尝试
{       
documentdocument=(Document)builder.build(xmlFile);
//停车场
Element elementoParking=document.getRootElement();
//奥本戈植物园酒店
List listadePlantas=elementoParking.getChildren(“planta”);
对于(int i=0;i
XML的DTD是:

<?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)>

安迪提出了正确的解决方案,但技术错误

您正在将XML文档加载到内存中的JDOM模型中。您正在更改内存模型中的内容,但没有将模型写回磁盘。。。。为此,你应该

您将要添加以下内容:

XMLOutputter xmlout = new XMLOutputter();
try (FileOutputStream fileout = new FileOutputStream("C:/Users/Alejandro/Parking/parking.MODIFIED.xml")) {
    xmlout.output(document, fileout);
}
此外,您的标记指示您正在使用JDOM2。在这种情况下,您应该使用启用泛型的列表。。。因此,您的代码应该如下所示(注意缺少强制转换…):

(您是在导入
org.jdom.Element
还是
org.jdom2.*
…)


此外,在你的帖子中,你指出你搜索了互联网。。。。前三名的结果都很好,但最近有一个,它有一个

Andy提出了正确的解决方案,但技术错误

您正在将XML文档加载到内存中的JDOM模型中。您正在更改内存模型中的内容,但没有将模型写回磁盘。。。。为此,你应该

您将要添加以下内容:

XMLOutputter xmlout = new XMLOutputter();
try (FileOutputStream fileout = new FileOutputStream("C:/Users/Alejandro/Parking/parking.MODIFIED.xml")) {
    xmlout.output(document, fileout);
}
此外,您的标记指示您正在使用JDOM2。在这种情况下,您应该使用启用泛型的列表。。。因此,您的代码应该如下所示(注意缺少强制转换…):

(您是在导入
org.jdom.Element
还是
org.jdom2.*
…)


此外,在你的帖子中,你指出你搜索了互联网。。。。的前三个结果都很好,但最近有一个,它有一个

您正在将xml文件读入DOM并修改DOM。我看不到您将修改后的DOM写回文件的位置。您是否真的在某个时候更改了文件?我不知道如何将更改保存到同一文件xml@prabugp-请注意,用户正在加载到JDOM,而不是DOM。。。但是,您是对的,它没有被保存回去。您正在将xml文件读入DOM并修改DOM。我看不到您将修改后的DOM写回文件的位置。您是否真的在某个时候更改了文件?我不知道如何将更改保存到同一文件xml@prabugp-请注意,用户正在加载到JDOM,而不是DOM。。。但是,你是对的,它没有被挽救回来。
        //Obtengo las plantas
        for (Element elementoPlanta : elementoParking.getChildren( "planta" )){