Leer Xml

16/05/2007 - 22:34 por Lu´pita | Informe spam
Hola!

Realizé un aplicación que recibe un xml desde un webservice, pero el xml me
lo envian como bytes y de ahí yo lo "transformo" al xml, el cual lo muestro
en una caja de texto, pero no he conseguido leerlo, es decir, tomar esos
datos y poder guardarlos en la base de datos.

El código que estuve utilizando es el siguiente:

//Aquí lo paso a la caja de texto
xml.LoadXml(Encoding.ASCII.GetString(thisByteSc));
txtScores.Text=xml.OuterXml;

//Aquí intento leerlo
XmlTextReader lector = new XmlTextReader(xml.InnerXml);

while (lector.Read())
{
if(lector.NodeType == XmlNodeType.Text)
{
ListBox1.Items.Add(lector.Value);
}
}

Pero me genera el siguiente error en esta línea:
XmlTextReader lector = new XmlTextReader(xml.InnerXml);

en donde el error dice lo siguiente:
"La ruta de acceso es demasiado larga después de completarse. Asegúrese de
que la ruta de acceso es inferior a 260 caracteres"

Obviamente no puedo hacer más pequeño el xml, alguien podría ayudarme.

Gracias y Saludos...

Preguntas similare

Leer las respuestas

#1 Alberto Poblacion
17/05/2007 - 08:10 | Informe spam
"Lu´pita" wrote in message
news:
[...]
Pero me genera el siguiente error en esta línea:
XmlTextReader lector = new XmlTextReader(xml.InnerXml);

en donde el error dice lo siguiente:
"La ruta de acceso es demasiado larga después de completarse. Asegúrese de
que la ruta de acceso es inferior a 260 caracteres"



El constructor del XmlTextReader tiene varias sobrecargas. Como le estás
pasando un String (xml.InerXml), utiliza la sobrecarga que recibe un string,
la cual espera que el string en cuestión sea el nombre de fichero que debe
leer. Como tu string no trae un nombre de fichero, te da un error.

En tu caso te interesa usar la sobrecarga que recibe un Stream, para
poder leer el Xml. El Stream lo puedes construir si quieres a partir de los
bytes que recibiste inicialmente, con lo cual te ahorras el paso que los
convierte a string:

MemoryStream stm = new MemoryStream(thisByteSc);
XmlTextReader lector = new XmlTextReader(stm);
...
Respuesta Responder a este mensaje
#2 Jowie
17/05/2007 - 10:13 | Informe spam
Buenas,

No estoy muy seguro porque no lo he mirado pero creo que cuando haces:

//Aquí intento leerlo
XmlTextReader lector = new XmlTextReader(xml.InnerXml);



le estas pasando como paramentro al constructor el contenido del
xmlDocument en vez de la ruta del xml, si quieres la ruta puedes
obtenerla en la propiedad BaseUri.
Respuesta Responder a este mensaje
#3 Alberto Poblacion
17/05/2007 - 10:24 | Informe spam
Vuelvo a enviar la misma respuesta que ya envié antes, que por algún motivo
misterioso no aparece en el newsgroup a través de NNTP:

"Lu´pita" wrote in message
news:
[...]
Pero me genera el siguiente error en esta línea:
XmlTextReader lector = new XmlTextReader(xml.InnerXml);

en donde el error dice lo siguiente:
"La ruta de acceso es demasiado larga después de completarse. Asegúrese de
que la ruta de acceso es inferior a 260 caracteres"



El constructor del XmlTextReader tiene varias sobrecargas. Como le estás
pasando un String (xml.InerXml), utiliza la sobrecarga que recibe un string,
la cual espera que el string en cuestión sea el nombre de fichero que debe
leer. Como tu string no trae un nombre de fichero, te da un error.

En tu caso te interesa usar la sobrecarga que recibe un Stream, para
poder leer el Xml. El Stream lo puedes construir si quieres a partir de los
bytes que recibiste inicialmente, con lo cual te ahorras el paso que los
convierte a string:

MemoryStream stm = new MemoryStream(thisByteSc);
XmlTextReader lector = new XmlTextReader(stm);
...
Respuesta Responder a este mensaje
#4 Jowie
17/05/2007 - 12:54 | Informe spam
Buenas,

No estoy muy seguro pero creo que cuando haces esto:

//Aquí intento leerlo
XmlTextReader lector = new XmlTextReader(xml.InnerXml);



le estas pasando como ruta del xml el contenido del xmlDocument, es
decir el propio xml, si lo que quieres es pasarle la ruta prueba con
xml.BaseUri
Respuesta Responder a este mensaje
#5 chanchitodata
17/05/2007 - 14:12 | Informe spam
Hola Lupita,

Con la linea

xml.LoadXml(Encoding.ASCII.GetString(thisByteSc));

Ya has leido el XML a memoria y ya esta dentro de una estructura que
se puede recorrer, es decir no necesitas releer el xml(a demas el
constructor de XmlTextReader toma una ruta como parametro, no un
string XML).

Para recorrer esa estructura puedes hacer algo asi(no he verificado el
codigo, solo escribo a memoria)

XmlElement root;
XmlNode node;

root = xml.DocumentElement;

for(int i = 0, root.ChildNodes != null && i < root.ChildNodes.Count;i+
+){
node = root.ChildNodes[i];
if (node.Name == "algo"){
ListBox1.Items.Add(node.InnnerText);
}
}


Tambien puedes usar un XPathNavigator para recorrer el xml pero eso ya
es para modificar el XML al mismo tiempo que lo recorres.
Para seleccionar ciertos nodos de la extructura XML usas el metodo
SelectNodes de la clase XmlNode,XmlElement o XmlDocument

Ojala esto te ayude,

/Rodrigo

On 16 mayo, 16:34, LuŽpita wrote:
Hola!

Realizé un aplicación que recibe un xml desde un webservice, pero el xml me
lo envian como bytes y de ahí yo lo "transformo" al xml, el cual lo muestro
en una caja de texto, pero no he conseguido leerlo, es decir, tomar esos
datos y poder guardarlos en la base de datos.

El código que estuve utilizando es el siguiente:

//Aquí lo paso a la caja de texto
xml.LoadXml(Encoding.ASCII.GetString(thisByteSc));
txtScores.Text=xml.OuterXml;

//Aquí intento leerlo
XmlTextReader lector = new XmlTextReader(xml.InnerXml);

while (lector.Read())
{
if(lector.NodeType == XmlNodeType.Text)
{
ListBox1.Items.Add(lector.Value);

}
}

Pero me genera el siguiente error en esta línea:
XmlTextReader lector = new XmlTextReader(xml.InnerXml);

en donde el error dice lo siguiente:
"La ruta de acceso es demasiado larga después de completarse. Asegúrese de
que la ruta de acceso es inferior a 260 caracteres"

Obviamente no puedo hacer más pequeño el xml, alguien podría ayudarme.

Gracias y Saludos...
Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaSiguiente Respuesta Tengo una respuesta
Search Busqueda sugerida