write read leer example ejemplo documentelement create crear c# xml

read - write xml c#



Caracteres ilegales XML en la ruta (4)

No muestra su código fuente, sin embargo, supongo que lo que está haciendo es esto:

string xml = ... retrieve ...; XmlDocument doc = new XmlDocument(); doc.Load(xml); // error thrown here

El método Load espera que un nombre de archivo no sea un XML en sí mismo. Para cargar un XML real, simplemente use el método LoadXml :

... same code ... doc.LoadXml(xml);

De forma similar, al usar XDocument el XDocument Load(string) espera un nombre de archivo , no un XML real. Sin embargo, no hay LoadXml método LoadXml , por lo que la forma correcta de cargar el XML desde una cadena es la siguiente:

string xml = ... retrieve ...; XDocument doc; using (StringReader s = new StringReader(xml)) { doc = XDocument.Load(s); }

De hecho, al desarrollar cualquier cosa, es una muy buena idea prestar atención a la semántica (significado) de los parámetros, no solo a sus tipos. Cuando el tipo de parámetro es una string , no significa que uno pueda alimentar cualquier cosa que sea una cadena.

También con respecto a su pregunta actualizada, no tiene sentido usar XmlDocument y XDocument al mismo tiempo. Elija uno u otro.

Estoy consultando un servicio basado en jabón y deseo analizar el XML devuelto, sin embargo, cuando intento cargar el XML en un XDoc para consultar los datos. recibo un mensaje de error "caracteres ilegales en la ruta"? Esto (abajo) es el XML devuelto por el servicio. Simplemente quiero obtener la lista de competiciones y ponerlas en una lista que tengo configurada. Sin embargo, el XML se carga en un documento XML, por lo que debe estar correctamente formateado.

Cualquier consejo sobre la mejor manera de hacer esto y evitar el error sería muy apreciado.

<?xml version="1.0" ?> - <gsmrs version="2.0" sport="soccer" lang="en" last_generated="2010-08-27 20:40:05"> - <method method_id="3" name="get_competitions"> <parameter name="area_id" value="1" /> <parameter name="authorized" value="yes" /> <parameter name="lang" value="en" /> </method> <competition competition_id="11" name="2. Bundesliga" soccertype="default" teamtype="default" display_order="20" type="club" area_id="80" last_updated="2010-08-27 19:53:14" area_name="Germany" countrycode="DEU" /> </gsmrs>

Aquí está mi código, necesito poder consultar los datos en un XDoc:

string theXml = myGSM.get_competitions("", "", 1, "en", "yes"); XmlDocument myDoc = new XmlDocument(); MyDoc.LoadXml(theXml); XDocument xDoc = XDocument.Load(myDoc.InnerXml);


Por qué no

XDocument.Parse(theXml);

Supongo que esta será la solución correcta


Si este es realmente su resultado, es XML ilegal debido a los caracteres menos (''-''). Sospecho que ha cortado y pegado esto desde un navegador como IE. Debe mostrar el XML exacto de un editor de texto, no de un navegador.


Siguiendo la respuesta de Ondrej Tucny:

Si desea utilizar una cadena xml en su lugar, puede usar un elemento XElement y llamar al método "analizar". (Dado que para sus necesidades, XElement y XDocument satisfarían sus necesidades)

Por ejemplo ;

string theXML = ''... get something xml-ish...''; XElement xEle = XElement.Parse(theXML); // do something with your XElement

El método Parse de XElement le permite pasar una cadena XML, mientras que el método Load necesita un nombre de archivo.