2013-07-22 19 views
21

ich eine XElement haben, die wie folgt aussieht:erhalten XElement Attributwert

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

Wie kann ich XML verwenden, wird der Wert des Attributs Loginname zu extrahieren? Ich habe folgendes versucht, aber die q2 "Enumeration ergab keine Ergebnisse".

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); 
} 

Antwort

26
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" 
+0

Beachten Sie, dass das XAttribute null sein kann (nicht hier, ja), also vor dem Abrufen des Werts eine Nullprüfung durchführen soll. – user420667

0

Ich landete String-Manipulation mit dem Wert zu erhalten, so dass ich diesen Code schreiben, aber ich würde immer noch einen XML-Ansatz sehen möge, wenn es einen gibt.

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" 
    } 
} 
+4

Führen Sie keine String-Manipulation in XML durch. XML scheint im Allgemeinen einfach zu sein, ist es aber nicht. Verwenden Sie daher die von Microsoft bereitgestellten Tools, um sie zu analysieren. –

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"; 

Die letzte Zeile des Codes, wo es die string login Einstellung, sieht das Format so ...

var variable = condition ? A : B; 

Es im Grunde sagt, dass, wenn die Bedingung ist true, variable ist gleich A, andernfalls ist die Variable gleich B.

+0

Die letzte Zeichenfolge sollte sein: 'string login = user.Attributes? [" LoginName "] ?? "unbekanntes Login"; ' –

2

aus der Dokumentation für XAttribute.Value:

Wenn Sie den Wert bekommen und das Attribut möglicherweise nicht vorhanden ist, ist es bequemer, die explizite Konvertierung Operatoren zu verwenden, und das Attribut auf einen Nullable Types wie string oder Nullable<T> von Int32 zuweisen. Wenn das Attribut nicht vorhanden ist, wird der nullfähige Typ auf Null festgelegt.

+0

Und das zweite Beispiel in der referenzierten Dokumentation [link] (https://msdn.microsoft.com/en-us/library/system.xml.linq.xattribute.value (v = vs.110) .aspx) demonstriert die Verwendung der Konvertierungsoperatoren. –

Verwandte Themen