Tengo una XElement que se parece a esto:

<User ID="11" Name="Juan Diaz" LoginName="DN1\jdiaz" xmlns="http://schemas.microsoft.com/sharepoint/soap/directory/" />

¿Cómo puedo usar XML para extraer el valor de la LoginName atributo? He intentado lo siguiente, pero la q2 «de la Enumeración dado resultados».

var q2 = from node in el.Descendants("User")
    let loginName = node.Attribute(ns + "LoginName")
    select new { LoginName = (loginName != null) };
foreach (var node in q2)
{
    Console.WriteLine("LoginName={0}", node.LoginName);
}
InformationsquelleAutor LFurness | 2013-07-22

4 Comentarios

  1. 33
    var xml = @"<User ID=""11"" 
                      Name=""Juan Diaz"" 
                      LoginName=""DN1\jdiaz"" 
                      xmlns=""http://schemas.microsoft.com/sharepoint/soap/directory/"" />";
    
    var user = XElement.Parse(xml);
    var login = user.Attribute("LoginName").Value; //"DN1\jdiaz"
    • Tenga en cuenta que el XAttribute puede ser null (no aquí sí), por lo que puede querer de verificación null antes de obtener el Valor.
  2. 4
    XmlDocument doc = new XmlDocument();
    doc.Load("myFile.xml"); //load your xml file
    XmlNode user = doc.getElementByTagName("User"); //find node by tag name  
    string login = user.Attributes["LoginName"] != null ? user.Attributes["LoginName"].Value : "unknown login";

    La última línea de código, donde la configuración de la string login, el formato se parece a esto…

    var variable = condition ? A : B;

    Es básicamente diciendo que si la condición es true, la variable es igual a Una, de lo contrario la variable es igual a B.

    • La última cadena debe ser: string login = user.Attributes?["LoginName"] ?? "unknown login";
  3. 2

    de la documentación para el XAttribute.Valor:

    Si usted está recibiendo el valor y el atributo podría no existir, es más conveniente el uso de la conversión explícita de los operadores, y asignar el atributo a un tipo que acepta valores null como string o Nullable<T> de Int32. Si el atributo no existe, entonces el tipo que acepta valores null se establece en null.

    • Y el segundo ejemplo en la documentación de referencia enlace demuestra el uso de los operadores de conversión.
  4. 0

    Terminé mediante la manipulación de cadenas para obtener el valor, así que voy a publicar ese código, pero todavía me gustaría ver un XML enfoque si es que hay uno.

    string strEl = el.ToString();
    string[] words = strEl.Split(' ');
    foreach (string word in words)
    {
        if (word.StartsWith("LoginName"))
        {
            strEl = word;
            int first = strEl.IndexOf("\"");
            int last = strEl.LastIndexOf("\"");
            string str2 = strEl.Substring(first + 1, last - first - 1); 
            //str2 = "dn1\jdiaz"
        }
    }
    • No hacer la manipulación de cadenas en XML. XML parece simple pero no lo es. Así, el uso de las Herramientas proporcionadas por Microsoft para analizarlo.

Dejar respuesta

Please enter your comment!
Please enter your name here