Manipular XML en .NET

Hace poco tuve que manipular los resultados de una consulta FOR XML de SQL server. La query que me venía de base de datos contenía un campo con una sub-select que se imprimía en un string xml.

Dependiendo de unas restricciones de seguridad, para ciertos registros se tenían que eliminar algunos de los nodos del XML. Eso me obligaba a trasladar lógica de negocio a base de datos o bien tratar de aprovechar la potencia del framework .NET y Linq to XML.

Imaginemos que tenemos un string XML con los datos de contactos de clientes y que, en función de los permisos del usuario, no se permite mostrar el teléfono o la dirección de correo electrónico, por ejemplo. El campo XML que nos devolvería la base de datos para un cliente tendría una estructura de este tipo:

<Contacts>
	<Contact>
		<ContactId>1</ContactId>
		<Name>Jose</Name>
		<Surname>Perez</Surname>
		<Email>pepe@email.com</Email>
		<Phone>93 111 22 33</Phone>
		<Mobile>600 11 22 33</Mobile>
	</Contact>
        <Contact>
		<ContactId>1</ContactId>
		<Name>Alberto</Name>
		<Surname>Garcia</Surname>
		<Email>berto@email.com</Email>
		<Phone>93 333 22 11</Phone>
		<Mobile>600 33 22 11</Mobile>
	</Contact>
</Contacts>

Para tratar el XML, es conveniente crear un método que reciba por parámetro la información de los datos de contacto de los clientes en un string con formato XML y un enumerado con los permisos del usuario que desea consultar los datos.

private static string ClearXmlInfo(string xmlInfo, IEnumerable permissions)
        {
            string resultXML = string.Empty;
 
            if (string.IsNullOrWhiteSpace(xmlInfo))
                return;
 
            XElement xElement = XElement.Parse(xmlInfo);
 
            var contacts = (from c in xElement.Descendants("Contact")
                           select c);
 
            foreach(contact in contacts)
            {
                if(!permissions.Contains(Permission.ShowEmail))
                    xElement.SetElementValue("Email", string.Empty);
                if(!permissions.Contains(Permission.ShowPhone))
                    xElement.SetElementValue("Phone", string.Empty);
                if(!permissions.Contains(Permission.ShowMobileNumber))
                    xElement.SetElementValue("Mobile", string.Empty);
 
                resultXML += xElement;
            };
 
            return resultXML;
        }

Conclusiones

El ejemplo es sencillo, pero espero que sirva para ilustrar que es bastante fácil recorrer y manipular XML con el framework de .NET y Linq.

Acerca de dandel

Joven y entusiasta programador al que le apasiona su trabajo. Java, PHP, VB, C#, CSS, jQuery, Lucene o Photoshop, no hay código que se me resista o herramienta que no sea capaz de dominar bajo el yugo de mi perseverancia.

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos necesarios están marcados *

*

Puedes usar las siguientes etiquetas y atributos HTML: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>