none
xml no puedo trabar caracteres extraños RRS feed

  • Pregunta

  • buenos dias no puedo tratar unos xml porque  cuando encuentra una ñ o nº  no los abre para poder sacar la informacion si alguien sabe como puedo hacer para q los abra y los pueda tratar tambien quisiera saber como modifico un campo del xml  digamos tengo la etiqueta referencia con  el valor 7895  quiero cambiarlo 56312 como lo puedo hacer
    jueves, 19 de mayo de 2016 7:36

Respuestas

  • Para los caracteres debes asignar la codificación. No se que lenguaje usas pero es algo como esto:

    public static DataSet XML_Lee(String Ruta, String Archivo)
    {
    
    DataSet ds = new DataSet();
    
    foreach (DataTable dataTable in ds.Tables)
    		dataTable.BeginLoadData();
    
    string FileName = System.IO.Path.Combine(Ruta, Archivo);
    	
    using(XmlReader xmlReader = XmlReader.Create(new StreamReader(FileName, Encoding.GetEncoding("ISO-8859-9")))) 
       {
    	ds.ReadXml(xmlReader);
       }
    	
    
       foreach (DataTable dataTable in ds.Tables)
    	dataTable.EndLoadData();
       return ds;
    }

    Para modificar nodos tienes que localizarlo y asignarle el nuevo valor. Si por ejemplo tienes un xml como este

    <?xml version="1.0" encoding="utf-8"?>
    <Notas>
      <Nota>
        <Titulo>Alarma1</Titulo>
        <Descrip>Desc1</Descrip>
        <Hora>23/02/2015 13:21PM</Hora>
      </Nota>
    </Notas>

    Puedes seguir un método como este:

    XmlDocument xml = new XmlDocument();

                string FileName = System.IO.Path.Combine ("c:/ruta/","Prueba.xml");
                xml.Load(FileName);

                foreach (XmlElement element in xml.SelectNodes("//Nota"))
                {
                    foreach (XmlElement element1 in element)
                    {
                        if (element.SelectSingleNode("//Titulo").InnerText == "Alarma1")
                        {
                            MessageBox.Show(element1.InnerText);
                            XmlNode newvalue = xml.CreateElement("Titulo");
                            newvalue.InnerText = "MODIFIED";
                            element.ReplaceChild(newvalue, element1);

                            xml.Save("c:/ruta/Prueba.xml");
                        }
                    }
                }


    Saludos, Javier J

    • Marcado como respuesta carlos carpio2 jueves, 19 de mayo de 2016 11:10
    jueves, 19 de mayo de 2016 8:23

Todas las respuestas

  • Para los caracteres debes asignar la codificación. No se que lenguaje usas pero es algo como esto:

    public static DataSet XML_Lee(String Ruta, String Archivo)
    {
    
    DataSet ds = new DataSet();
    
    foreach (DataTable dataTable in ds.Tables)
    		dataTable.BeginLoadData();
    
    string FileName = System.IO.Path.Combine(Ruta, Archivo);
    	
    using(XmlReader xmlReader = XmlReader.Create(new StreamReader(FileName, Encoding.GetEncoding("ISO-8859-9")))) 
       {
    	ds.ReadXml(xmlReader);
       }
    	
    
       foreach (DataTable dataTable in ds.Tables)
    	dataTable.EndLoadData();
       return ds;
    }

    Para modificar nodos tienes que localizarlo y asignarle el nuevo valor. Si por ejemplo tienes un xml como este

    <?xml version="1.0" encoding="utf-8"?>
    <Notas>
      <Nota>
        <Titulo>Alarma1</Titulo>
        <Descrip>Desc1</Descrip>
        <Hora>23/02/2015 13:21PM</Hora>
      </Nota>
    </Notas>

    Puedes seguir un método como este:

    XmlDocument xml = new XmlDocument();

                string FileName = System.IO.Path.Combine ("c:/ruta/","Prueba.xml");
                xml.Load(FileName);

                foreach (XmlElement element in xml.SelectNodes("//Nota"))
                {
                    foreach (XmlElement element1 in element)
                    {
                        if (element.SelectSingleNode("//Titulo").InnerText == "Alarma1")
                        {
                            MessageBox.Show(element1.InnerText);
                            XmlNode newvalue = xml.CreateElement("Titulo");
                            newvalue.InnerText = "MODIFIED";
                            element.ReplaceChild(newvalue, element1);

                            xml.Save("c:/ruta/Prueba.xml");
                        }
                    }
                }


    Saludos, Javier J

    • Marcado como respuesta carlos carpio2 jueves, 19 de mayo de 2016 11:10
    jueves, 19 de mayo de 2016 8:23
  • uso c# para Windows Forms  
    jueves, 19 de mayo de 2016 8:41
  • no lo entiendo   o yo me explicado mal yo recibo un fichero  xml que tengo que añadir campos y modificar campos yo los añado todos correctamente 

    bool comprobar = true; XElement doc = XElement.Load(ruta); Random rnd = new Random(); int numero = rnd.Next(0, 1000); string nombreal = Convert.ToString(numero); string referencia = doc.Element("referencia").Value; string provincia = doc.Element("provincia").Value; string localidad = doc.Element("localidad").Value; string registro = doc.Element("registro").Value; string numero_registro = doc.Element("numero_registro").Value; string observa1 = doc.Element("observaciones").Value; string referencia2 = nuevareferencia(referencia, observa1); XElement cod_pedido = new XElement("cod_pedido"); cod_pedido.Value = "-1"; doc.Element("referencia").AddAfterSelf(cod_pedido);

    doc.save(ruta);

    claro no reconoce los caracteres especiales como puedo hacer para que lo haga aparte como modifico el valor de un campo 

    jueves, 19 de mayo de 2016 9:11
  •      

    gracias por la ayuda la primera parte estaba bien la segunda tenido que modificara

    var todo = from c in doc.Descendants() select c; foreach (var element in todo) { if (element.Name == "referencia" && referencia2 != null) { element.SetValue( referencia2); } else if (element.Name == "registro") { element.SetValue (datos[0]); } else if (element.Name == "numero_registro" && datos[1]!=null) { element.SetValue(datos[1]); } }


    jueves, 19 de mayo de 2016 11:10