2010-03-24 45 views
22

¿Cómo puedo verificar y ver si un nodo tiene cierto atributo? Tengo un archivo XML que contiene varios nodos con el siguiente aspecto:Comprobar si XML-node tiene un atributo con Linq C#?

<Field From="OldString" To="NewString" /> 

Hasta ahora todo bien. El problema es que esta estructura está a punto de cambiar para que algunos nodos se verá así:

<Field From="OldString" To="NewString" PrefixValue="OptionalAttribute" /> 

Ahora, cuando el prefixValue está presente se supone que debo anteponer el valor de ese atributo en una cadena, y que no es muy difícil, pero he tenido algunos problemas cuando trato de ver si el atributo PrefixValue está presente para un nodo. En los casos en que no hay PrefixValue presente, el atributo PrefixValue no existirá en absoluto en el nodo. ¿Cómo voy a verificar para ver si el atributo existe con una expresión Linq?

Respuesta

47

Bueno, depende de lo que quieras hacer. Si desea utilizarlo en una proyección, puede utilizar:

(string) element.Attribute("PrefixValue") 

que devolverá un valor nulo si el atributo está presente, lo cual es útil.

Si desea que en una cláusula WHERE, usar algo como:

where element.Attribute("PrefixValue") != null 
+0

Básicamente, solo quiero que se devuelva un valor nulo si el atributo falta por completo como primer paso. ¡Gracias! – Henric

+1

Recibo el error XNode no tiene la propiedad o el método de atributo ... – Ziggler

+0

@Ziggler: Eso sugiere que está utilizando un 'XNode' en lugar de un' XElement'. No podemos ver ninguno de sus códigos, pero básicamente quiere usar 'XElement' ... –

3
if ((string)level1.Attribute("customer_code") != null) 
{ 
    newBox.customer_code = (string)level1.Attribute("customer_code").Value; 
} 

El código anterior debe tener cuidado de comprobar si existe el atributo.

Sin la instrucción if, obtendrá un objeto no configurado en un error de instancia.

Cuestiones relacionadas