Linq to XML con espacios de nombres

Realizar consultas en documentos XML con Linq es realmente practico. Para cargar un documento usaremos XDocument. Para cargar un nodo usaremos XElement. Sea como sea si este documento o nodo contiene un espacio de nombres las consultas Linq no devuelven el valor correctamente.

Por ejemplo el siguiente documento XML contiene un espacio de nombres en nodo raíz:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?> 
<Project xmlns="http://schemas.microsoft.com/project">  
 <SaveVersion>12</SaveVersion> 
 <Tasks>   
  <Task>    
   <UID>0</UID>    
   <ID>0</ID>    
   <Type>0</Type>    
   <IsNull>0</IsNull>    
   <WBS>0</WBS>    
   <OutlineNumber>0</OutlineNumber> 
  </Task>
 </Tasks>
</Project>

El código que te va a permitir leer correctamente los nodos del documento es el siguiente donde puedes ver como se crea el espacio de nombres y ese se usa en las consultas Linq.

XDocument xDoc = XDocument.Parse(inputString); 
XNamespace ns = "http://schemas.microsoft.com/project";
var data = from c in xDoc.Descendants(ns + "Task")            
           select (string)c.Element(ns + "Type"); 
foreach (string val in data) 
{    
 Console.WriteLine(val); 
}

Més informació a :

XDocument and Linq returns null if the element has xmlns attribute

XNamespace (Clase)

Anuncis

OpenFileDialog en una aplicació WPF

Realment estem molt ben acostumats amb Winforms al tenir molts controls a la barra d’eines per insertar. En WPF els trobem a faltar. Un d’ells és l’OpenFileDialog.

Hi ha dues maneres de poder fer sortir aquest control a les aplicacions WPF. El primer és simplement importar la llibreria System.Windows.Forms al projecte i crear una instància de OpenFileDialog i cridar el ShowDialog manualment. D’aquesta manera fem el mateix que es fa en aplicacions Winforms.

using System.Windows.Forms
//Resta de codi
OpenFileDialog ofile=new OpenFileDialog();
if(ofile.ShowDialog()==DialogResult.OK)
{
}

Una altre manera és importar Microsoft.Win32 i fer servir el codi següent:

using System.Windows.Forms
//Resta de codi
OpenFileDialog ofile=new OpenFileDialog();
bool? ofres=ofile.ShowDialog();
if(ofres.HasValue && ofres.Value)
{
}

La segona opció té un avantatge respecte el primer. Utilitzant System.Windows.Forms estem obligats a obrir el diàleg des de un thread STA. Amb WPF no ho tenim per defecte i moltes vegades necessitem obrir en threads secundaris. En aquest escenari pots utilitzar la segona opció.

Microsoft diu

OpenFileDialog is in the microsoft.win32 namespace.  In WPF the OpenFileDialog is simply a wrapper around the call to win32.

Resum:

Utilitza l’espai de noms Microsoft.Win32 que és més directe i pràctic.

Formación de Desarrollo de Sharepoint en Bantierra

Estos días estoy dando formación de desarrollo de Sharepoint en Bantierra (Zaragoza). El curso tiene una primera parte dónde les enseño los conceptos básicos de Microsoft .Net con Visual Basic para después lanzarnos de lleno con el Sahrepoint. Es una formación muy interesante porque vamos a dar muchos conceptos que mis alumnos deberán asimilar lo más rápidamente posible y mi objetivo es conseguirlo.

Como toda formación que hago en ello pongo toda mi ilusión e empeño.

NOTA : En esta formación utilizan mi libro como herramienta de soporte.