Получить значение атрибута xelement
У меня есть XElement, который выглядит так:
<User ID="11" Name="Juan Diaz" LoginName="DN1\jdiaz" xmlns="http://schemas.microsoft.com/sharepoint/soap/directory/" />
Как я могу использовать XML для извлечения значения атрибута LoginName? Я попробовал следующее, но q2 "Enumeration не дал никаких результатов".
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);
}
Ответы
Ответ 1
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"
Ответ 2
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.
Ответ 3
из документов для XAttribute.Value:
Если вы получаете значение и атрибут может не существовать, удобнее использовать явные операторы преобразования и присваивать атрибут типу с нулевым значением, например string
или Nullable<T>
в Int32
. Если атрибут не существует, то тип nullable устанавливается равным null.
Ответ 4
Я закончил использование строковых манипуляций, чтобы получить значение, поэтому я опубликую этот код, но мне все равно хотелось бы увидеть подход 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"
}
}