El parser XML con el que estoy más familiarizado sigue siendo MSXML, sorprendente ¿no?
Tiene una explicación, en .NET vemos XML en todos sitios (ficheros de configuración, DataSets, esquemas...)
pero siempre encuntras unas clases que te abstraen de la tediosa tarea de masticar el XML.
Hoy ha sido el primer día que me he visto en la necesidad de consultar un stream XML, ha costado un
poco, sobre todo por que los Namespaces que definian el documento.
El documento:
Obtener el contenido del nodo faultcode con MSXML es tan sencillo como
Public Function parseSoapFault(xml as String) as String ···Dim doc as new MSXML.DOMDocument ···Dim node as MSXML.IXMLNode ···doc.loadXml(xml) ···node = selectSingleNode("/soap:Envelope/soap:Body/soap:Fault/faultcode") ...parseSoapFault = node.value End Public
Lo que no me gusta de este método es que necesito guardar todo el DOM en memoria,
igual que si fuese a modificar el documento, con System.Xml tenemos otra alternativa,
que se basa en usar la clase XPathNavigator para poder cargar el DOM en modo
sólo lectura. Además en vez de trabajar con strings cargamos el documento
directamente desde un Stream. Este el código resultante:
public static string parseSoapFault(Stream responseStream) { string result = String.Empty; XPathDocument doc = new XPathDocument(responseStream); XPathNavigator nav = doc.CreateNavigator(); XPathExpression expr = nav.Compile("/soap:Envelope/soap:Body/soap:Fault/faultcode"); XmlNamespaceManager context = new XmlNamespaceManager(nav.NameTable); context.AddNamespace("soap", "http://schemas.xmlsoap.org/soap/envelope/"); expr.SetContext(context); XPathNodeIterator iter = nav.Select(expr); iter.MoveNext(); result = iter.Current.Value; responseStream.Close(); return result; }Posted by rido at 4 de Septiembre 2003 a las 09:35 AM
Este tipo de cosas las haces en cliente, no?
siempre me parecio un poco jevy lo de dejar tus funciones vbscript para toquetear XML y que las puedan leer otros... :P
Posted by: Joshua on 4 de Septiembre 2003 a las 01:35 PMeste codigo es c#, y se compila. Yo no veo el problema de mostrar como se "busca" en el XML, al fin y al cabo es como ver un estructura de carpetas y querer ocultar el PATH al hacer 'ls'
Posted by: rido on 5 de Septiembre 2003 a las 11:28 PMArguendo - For the sake of argument
Prehende uxorem meam, sis! - Take my wife, please!
Inter vivos - Living
Liberate Te Ex Inferis - Save yourself from hell
Audi et alteram partem - Hear the other side too
Cras amet qui nunquam amavit; Quique amavit, cras amet - May he love tomorrow who has never loved before