it-swarm.com.de

xwert Attributwert abrufen

Ich habe ein XElement, das so aussieht:

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

Wie kann ich XML verwenden, um den Wert des LoginName-Attributs zu extrahieren? Ich habe folgendes versucht, aber das q2 "Enumeration brachte 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);
}
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
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 Codezeile, in der string login eingestellt ist, sieht folgendermaßen aus ...

var variable = condition ? A : B;

Im Wesentlichen heißt das, wenn die Bedingung true ist, ist die Variable gleich A, andernfalls ist die Variable gleich B.

4
sora0419

aus den Dokumenten für XAttribute.Value:

Wenn Sie den Wert erhalten und das Attribut möglicherweise nicht vorhanden ist, empfiehlt es sich, die expliziten Konvertierungsoperatoren zu verwenden und das Attribut einem nullfähigen Typ wie string oder Nullable<T> von Int32 zuzuweisen. Wenn das Attribut nicht vorhanden ist, wird der nullfähige Typ auf null gesetzt.

2
adgteq

Am Ende habe ich die String-Manipulation verwendet, um den Wert zu erhalten, also werde ich diesen Code posten, aber ich würde trotzdem gerne einen XML-Ansatz sehen, 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"
    }
}
0
LFurness