Stratos: Punto de Encuentro de Desarrolladores

¡Bienvenido a Stratos!

Acceder

Foros





Problemas con XPathNavigator

Iniciado por seth444, 15 de Mayo de 2008, 10:09:14 AM

« anterior - próximo »

seth444

Hola a tod@s,

Tengo un problemilla con la clase XPathNavigator, la utilizo para recorrer ficheros Xaml. esta es la parte del código referente a mi problema:

     (1)XmlDocument doctToXaml = new XmlDocument();
     (2)doctToXaml.Load(new StringReader(strXamlOut));
     (3)XPathNavigator FinalnavXml = doctToXaml.CreateNavigator();

La variable "strXamlOut" es una cadena que contiene todo el código Xaml que necesito. Mi problema esta en (3), resulta que mi código Xaml tiene la siguiente linea en su código, "<?xml version="1.0" encoding="UTF-16"?>", esta codificación es muy importante porque me permite mostrar los acentos de las cadenas y en la linea (3), pierdo esta linea de codificacion de la cadena que se carga al PathNavigator. Me imagino que es porque de alguna manera al crear el XPathNavigator, se filtra la entrada, cree que es un comentario y por lo tanto se lo carga.

Mi pregunta es, ¿¿¿ existe alguna manera de añadir la linea de codificación al Xaml que está cargado en el XPathNavigator ????  

Gracias y perdonar las molestias.
lt;< Omnia in gloriam Dei facite (1Co 10, 31) >>

Tei

¿No puedes usar UTF-8 en lugar de UTF-16?
UTF-8 es un formato de texto, que ademas soporta cadenas de bytes para representar cualquier grafo que se haya inventado, y que se invente en el futuro.

Pero UTF-16 no es un formato de texto, es un formato binario, y por ejemplo, debe empezar (si no me equivoco) por el caracter BOM, para indicar esto.

Supongo que ese codigo que pones no es Perl, he googleado un poco, y he encontrado esto:
http://msdn.microsoft.com/en-us/library/system.xml.xmlnode.createnavigator(VS.71).aspx

Citar
[C#]
XmlDocument doc = new XmlDocument();
doc.Load("books.xml");

// Modify the XML file.
XmlElement root = doc.DocumentElement;
root.FirstChild.LastChild.InnerText = "12.95";

Lo que me hace pensar que te falta pedir el  doctToXaml.DocumentElement

La logica de esto sera, seguramente, que CreateNavigator es un evento del objeto tipo nodo, y no un evento objeto documento. Asi que a tu peticion, te devuelve un subtree, y no un documento, y por lo visto documento != subtree.

seth444

He intentado seguir los pasos que me has dicho. Tenías razón, con lo de la codificación, arreglado, ahora uso UTF-8.

No puedo usar lo que me expones por dos motivos,

1) Cuando le asigno al Xmlelement el documento, "XmlElement root = doctToXaml.DocumentElement;" no se añade el código del xaml completo, sino solamente una parte. Me imagino que lo que querías era que de alguna forma en "root" estuviera contenido todo el código xaml para poder manipularlo después. Sin embargo, como te he dicho sólo se añade parte del arbol xaml, con lo cual, ya me es imposible añadir la linea de codificación en la posición que deseo (que es al principio del documento).
2) Cuando intento añadir la linea de codificación, "root.FirstChild.InnerText = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>";", lo que me añade al xaml es la siguiente linea, "&lt;?xml version="1.0" encoding="UTF-8"?&gt;", es decir, me codifica los caracteres "<" y ">"


Un saludo y gracias por intentar ayudarme ;).

PD: programo en C#, como bien has supuesto ^^.
lt;< Omnia in gloriam Dei facite (1Co 10, 31) >>

seth444

Ya he encontrado la solución, y esta no está en encontrar una forma estraña de añadir lineas al XpathNavigator.

Está en codificar mediante la clase Encoding la cadena xaml antes de trabajar con ella en el XpathNavigator.


Gracias de todas formas por intentar ayudarme ;).
lt;< Omnia in gloriam Dei facite (1Co 10, 31) >>

Tei







Stratos es un servicio gratuito, cuyos costes se cubren en parte con la publicidad.
Por favor, desactiva el bloqueador de anuncios en esta web para ayudar a que siga adelante.
Muchísimas gracias.