buenas,
Aquí mi solución para este problema , supongamos que tenemos el siguiente archivo XML, que puede ser una respuesta de consumir un WebService, un archivo que generamos, etc.
Archivo Xml
<soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"> <soap:Body> <GetReportResultsResponse xmlns="https://myservice"> <GetReportResultsResult>FileXml</GetReportResultsResult> </GetReportResultsResponse> </soap:Body> </soap:Envelope>
Como se pueden dar cuenta, se observan prefijos en cada nodo, este prefijo es “soap” y el archivo Xml contiene el namespace para usar este prefijo, pero al momento de seleccionar un nodo de la siguiente manera:
XmlDocument document = new XmlDocument(); document.Load(@"../../FileXml.xml"); XmlNodeList nodes = document.SelectNodes(@"soap:Body");
Visual Studio nos informa de la siguiente excepción:
“Exception: Namespace Manager or XsltContext needed. This query has a prefix, variable, or user-defined function.”
Esto se debe a que no se reconoce el nombre de espacio que contiene nuestro archivo Xml, para solucionarlo debemos agregar un administrador de namespace y agregarlo a la selección de la siguiente manera:
Solución:
XmlNamespaceManager nms = new XmlNamespaceManager(document.NameTable); nms.AddNamespace("soap", "http://schemas.xmlsoap.org/soap/envelope"); XmlNodeList nodes = document.SelectNodes(@"soap:Body",nms);
Con esto es suficiente para poder seleccionar nuestros nodos, y así manipularlo a nuestro antojo. Espero que les ayude este tip, así que saludos…..
Saludos,
Norberto









Comentarios recientes