Cen*_*nce 0 java xml dtd jdom-2
我正在尝试使用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() );
}
}
Run Code Online (Sandbox Code Playgroud)
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)>
Run Code Online (Sandbox Code Playgroud)
安迪提出了正确的解决方案,但对于错误的技术.
您正在将XML文档加载到JDOM内存模型中.您正在更改内存模型中的内容,但您没有将模型写回磁盘....为此您应该使用XMLOutputter
您需要添加以下内容:
XMLOutputter xmlout = new XMLOutputter();
try (FileOutputStream fileout = new FileOutputStream("C:/Users/Alejandro/Parking/parking.MODIFIED.xml")) {
xmlout.output(document, fileout);
}
Run Code Online (Sandbox Code Playgroud)
此外,您的标记表明您正在使用JDOM2.在这种情况下,您应该使用泛型启用的列表...所以您的代码应该看起来像(注意缺少强制转换......):
Run Code Online (Sandbox Code Playgroud)//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" )){
Run Code Online (Sandbox Code Playgroud)
(你是导入org.jdom.Element还是org.jdom2.*......?)
此外,在你的帖子中你表明你搜索了互联网.... 谷歌搜索'JDOM保存文件'的前三个结果都很好,但最近一个完整的教程被放在一起,它有一个专门用于的XMLOutputter
| 归档时间: |
|
| 查看次数: |
681 次 |
| 最近记录: |