获取xelement属性值

时间:2013-07-22 13:48:30

标签: c# xml linq-to-xml xelement

我有一个如下所示的XElement:

<User ID="11" Name="Juan Diaz" LoginName="DN1\jdiaz" 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 个答案:

答案 0 :(得分:32)

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"

答案 1 :(得分: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";

最后一行代码,它设置string login,格式如下所示......

var variable = condition ? A : B;

基本上说如果条件为true,则变量等于A,否则变量等于B.

答案 2 :(得分:2)

来自XAttribute.Value的文档:

  

如果您获得了值并且该属性可能不存在,则使用显式转换运算符会更方便,并将该属性指定为可为空的类型,例如stringNullable<T> { {1}}。如果该属性不存在,则可以为null的类型设置为null。

答案 3 :(得分:0)

我最终使用字符串操作来获取值,所以我将发布该代码,但如果有的话,我仍然希望看到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"
    }
}