我正在做我自己的Android應用程序,我正在煩惱。在Android中解析XML DOMDOWNE
我的應用程序讀取和寫入一個XML文件。 我有這樣的代碼從SD卡打開XML文件:
public void abrirSD()
{
try{
DocumentBuilderFactory docFactory = DocumentBuilderFactory.newInstance();
DocumentBuilder docBuilder = docFactory.newDocumentBuilder();
dom = docBuilder.parse(new File("mnt/sdcard/gastos.xml"));
}
catch (Exception e) {
e.printStackTrace();
}
}
它的工作原理好這個代碼將文件添加信息:
public boolean nuevo(Gasto clGasto)
{
this.abrirSD();
String strDesc=clGasto.getDescripcion();
String strMonto=Double.toString(clGasto.getMonto());
java.util.Date date = new java.util.Date();
java.text.SimpleDateFormat sdf=new java.text.SimpleDateFormat("dd/MM/yyyy");
String strFecha = sdf.format(date);
Node gastos=dom.getFirstChild();
Node gasto= dom.createElement("gasto");
Element descripcion= dom.createElement("descripcion");
descripcion.appendChild(dom.createTextNode(strDesc));
gasto.appendChild(descripcion);
Element monto= dom.createElement("monto");
monto.appendChild(dom.createTextNode(strMonto));
gasto.appendChild(monto);
Element fecha= dom.createElement("fecha");
fecha.appendChild(dom.createTextNode(strFecha));
gasto.appendChild(fecha);
gastos.appendChild(gasto);
try
{
Transformer transformer = TransformerFactory.newInstance().newTransformer();
transformer.setOutputProperty(OutputKeys.INDENT, "yes");
StreamResult streamResult = new StreamResult(new File("mnt/sdcard/gastos.xml"));
DOMSource source = new DOMSource(dom);
transformer.transform(source, streamResult);
return true;
}
catch (Exception e) {
e.printStackTrace();
return false;
}
}
不過,這並不與這一個工作用於讀取信息
public List<Gasto> getAll()
{
List<Gasto> gastos = new ArrayList<Gasto>();
this.abrirSD();
//this.abrirArchivo();
//Nos posicionamos en el nodo principal del árbol (<gastos>)
Element root = dom.getDocumentElement();
//Localizamos todos los elementos <item>
NodeList items = root.getElementsByTagName("gasto");
//Recorremos la lista de gastos
for(int i=0;i<items.getLength();i++)
{
Gasto gasto= new Gasto();
//Obtenemos el gasto actual
Node item=items.item(i);
//Obtenemos la lista de datos del gasto actual
NodeList datosGasto = item.getChildNodes();
//Procesamos cada dato de el gasto actual
for (int j=0; j<datosGasto.getLength(); j++)
{
//asigno a dato el item actual
Node dato= datosGasto.item(j);
//Obtengo la etiqueta el item actual
String etiqueta= dato.getNodeName();
if(etiqueta.equals("descripcion"))
{
String texto= obtenerTexto(dato);
gasto.setDescripcion(texto);
}
else if(etiqueta.equals("monto"))
{
gasto.setMonto(Double.parseDouble(dato.getFirstChild().getNodeValue()));
}
else if(etiqueta.equals("fecha"))
{
java.util.Date fecha= new Date();
SimpleDateFormat formatoDeFecha = new SimpleDateFormat("dd/MM/yyyy");
try
{
fecha= formatoDeFecha.parse(dato.getFirstChild().getNodeValue());
}
catch(Exception e)
{
}
gasto.setFecha(fecha);
}
}
gastos.add(gasto);
}
return gastos;
}
我打開從資產XML文件,這個其他代碼,並將其與讀碼(GETALL方法)的作品。
public void abrirArchivo()
{
//Cargo el archivo xml en una variable Document
try
{
AssetManager assManager = context.getAssets();
DocumentBuilderFactory dbFactory = DocumentBuilderFactory.newInstance();
DocumentBuilder dBuilder = dbFactory.newDocumentBuilder();
dom = dBuilder.parse(assManager.open("gastos.xml"));
}
catch (Exception e) {
e.printStackTrace();
}
}
我不知道爲什麼一種方法適用於添加信息,不適用於閱讀。 感謝
這兩種方法都不適合我D: – 2013-04-28 13:18:25