【问题标题】:get xelement attribute value获取 xelement 属性值
【发布时间】:2013-07-21 06:54:50
【问题描述】:

我有一个如下所示的 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);
}

【问题讨论】:

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


    【解决方案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"
    

    【讨论】:

    • 请注意,XAttribute 可以为空(不是这里是),因此可能需要在获取值之前进行空检查。
    【解决方案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。

    【讨论】:

    • 最后一个字符串应该是:string login = user.Attributes?["LoginName"] ?? "unknown login";
    【解决方案3】:

    来自 XAttribute.Value 的文档:

    如果你正在获取值并且属性可能不存在,使用显式转换运算符更方便,并将属性分配给可空类型,例如stringInt32Nullable&lt;T&gt;。如果该属性不存在,则可空类型设置为空。

    【讨论】:

    • 参考文档link中的第二个例子演示了转换运算符的用法。
    【解决方案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"
        }
    }
    

    【讨论】:

    • 不要对 XML 进行字符串操作。 XML 通常看起来很简单,但事实并非如此。所以,使用微软提供的工具来解析吧。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多