获取xelement属性值

问题描述 投票:0回答:5

我有一个如下所示的 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
5个回答
52
投票
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"

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。


3
投票

来自 XAttribute.Value 的文档:

如果您获取值并且该属性可能不存在,则使用显式转换运算符并将属性分配给可空类型(例如

string
Nullable<T>
Int32
)会更方便。如果该属性不存在,则可空类型设置为 null。


0
投票

如果这是 VB .Net 那么这可能是一个更好的方法。

Function ExtractDataFromXML2(ByRef sInputXML As String) As String
    Dim anElement As XElement
    Dim sError As String
    Dim sMessageID As String
    Dim sResult As String = ""

    Try
        anElement = XElement.Parse(sInputXML)
        Dim Node As XElement = anElement.<push-response>.FirstOrDefault
        sError = Node.<response-result>.@code
        sMessageID = Node.Attribute("push-id").Value
        If sError = "1000" Then
            sResult = Node.<address>.Value & "@" & sMessageID
        Else
            sResult = "Error " & sError & ": " & Node.<response-result>.@desc
        End If
    Catch ex As Exception
        sResult = "XML Parse Error: " & ex.Message & " code=" & ex.Source & " " & ControlChars.CrLf
    End Try
    Return sResult
End Function

-1
投票

我最终使用字符串操作来获取值,因此我将发布该代码,但我仍然希望看到一种 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"
    }
}
© www.soinside.com 2019 - 2024. All rights reserved.