получить значение атрибута xelement

у меня есть XElement, который выглядит так:

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

Как я могу использовать XML для извлечения значения атрибута LoginName? Я попробовал следующее, Но Q2 "перечисление не дало никаких результатов".

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

4 ответов


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"

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

последняя строка кода, где это задание string login формат выглядит так...

var variable = condition ? A : B;

это в основном говорит, что если условие true, переменная равна A, в противном случае переменная равна B.


из документов для XAttribute.Значение:

Если вы получаете значение, а атрибут может не существовать, удобнее использовать явные операторы преобразования и назначить атрибут типу nullable, такому как string или Nullable<T> of Int32. Если атрибут не существует, то типу nullable присваивается значение null.


Я закончил с помощью манипуляции строками, чтобы получить значение, поэтому я опубликую этот код, но я все равно хотел бы увидеть подход XML, если он есть.

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