web-dev-qa-db-fra.com

obtenir la valeur d'attribut xelement

J'ai un XElement qui ressemble à ceci:

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

Comment utiliser XML pour extraire la valeur de l'attribut LoginName? J'ai essayé ce qui suit, mais le q2 "Énumération n'a donné aucun résultat".

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);
}
27
LFurness
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"
31
Sergey Berezovskiy
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 dernière ligne de code, où est défini le string login, le format ressemble à ceci ...

var variable = condition ? A : B;

En gros, si la condition est true, variable est égale à A, sinon variable est égale à B.

4
sora0419

à partir de la documentation pour XAttribute.Value:

Si vous obtenez la valeur et que l'attribut n'existe peut-être pas, il est plus pratique d'utiliser les opérateurs de conversion explicites et d'affecter l'attribut à un type nullable tel que string ou Nullable<T> sur Int32. Si l'attribut n'existe pas, le type nullable est défini sur null.

2
adgteq

J'ai fini par utiliser la manipulation de chaîne pour obtenir la valeur, donc je vais poster ce code, mais j'aimerais quand même voir une approche XML s'il en existe une.

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"
    }
}
0
LFurness