C# 从xml文件读取

C# 从xml文件读取,c#,xml,linq-to-xml,C#,Xml,Linq To Xml,我有这样一个xml文件: <?xml version="1.0" encoding="utf-8" ?> <LogOnUsersInfo> <GeneralInformation> <NumberOfUsers>2</NumberOfUsers> <LastUser UserName="User1"/> </GeneralInformation> <LogOnUserCollec

我有这样一个xml文件:

<?xml version="1.0" encoding="utf-8" ?>
<LogOnUsersInfo>
  <GeneralInformation>
    <NumberOfUsers>2</NumberOfUsers>
    <LastUser UserName="User1"/>
  </GeneralInformation>
  <LogOnUserCollection>
    <LogOnUser UserName="User1" Password="password">
      <Rights>
        <CanCreateProducts value="true"/>
        <CanEditProducts value="true"/>
        <CanDeleteProducts value="true"/>
        <CanCreateLogIns value="true"/>
        <CanDeleteLogIns value="true"/>
        <CanBeDeleted value="true"/>
        <HasDebugRights value="false"/>
      </Rights>
    </LogOnUser>  
    <LogOnUser UserName="User2" Password="password">
      <Rights>
        <CanCreateProducts value="true"/>
        <CanEditProducts value="true"/>
        <CanDeleteProducts value="true"/>
        <CanCreateLogIns value="true"/>
        <CanDeleteLogIns value="true"/>
        <CanBeDeleted value="true"/>
        <HasDebugRights value="false"/>
      </Rights>
    </LogOnUser>
  </LogOnUserCollection>
</LogOnUsersInfo>
我曾尝试使用XDocument将xml文件中的某些值读取到LogOnUser类的实例中,但是我有点卡住了,在浏览了MSDN上的文档后,没有找到我要找的内容,我想在这里提问可能会更快更容易

基本上,首先,我刚刚尝试将XML中的
UserName
字段读入
LogOnUser
对象的
UserName
属性。我试过这个:

var XMLUser = XElement.Load(LogOnUserXMLFilePath);

foreach(XElement e in XMLUser.DescendantsAndSelf())
{
    var user = new Model.LogOnUsers.LogOnUser(e.Name.ToString());
}
然而,这将
用户名设置为“logonUserInfo”,因此显然我需要深入研究xml,但我不知道如何进行


有人能给我指出正确的方向吗?

作为一名初学者,你可以做以下几点:

foreach(XElement e in XMLUser.Descendants("LogOnUser"))
{
    var user = new Model.LogOnUsers.LogOnUser((string)e.Attribute("UserName"));
}
基本上,您可以使用
subjects()
深入到XML树的任意层次,并使用
Attribute()
访问XML属性

然后可以通过以下方式获得权利信息,例如:

var cancreateproducts = (bool)e.Element("Rights")
                               .Element("CanCreateProducts")
                               .Attribute("value");

作为初学者,您可以执行以下操作:

foreach(XElement e in XMLUser.Descendants("LogOnUser"))
{
    var user = new Model.LogOnUsers.LogOnUser((string)e.Attribute("UserName"));
}
基本上,您可以使用
subjects()
深入到XML树的任意层次,并使用
Attribute()
访问XML属性

然后可以通过以下方式获得权利信息,例如:

var cancreateproducts = (bool)e.Element("Rights")
                               .Element("CanCreateProducts")
                               .Attribute("value");

您可以进行XPath搜索。您可以获取所有用户信息

var nodes = doc.SelectNodes("//LogOnUser");
foreach(var node in nodes)
{
    var username = node.Attributes["Username"];
}

您可以进行XPath搜索。您可以获取所有用户信息

var nodes = doc.SelectNodes("//LogOnUser");
foreach(var node in nodes)
{
    var username = node.Attributes["Username"];
}

太好了,非常感谢!然后我将如何搜索不同的用户?显然,现在我只有2个,但可能会更多。我是否需要搜索用户,比如他们的用户名?或者更容易更改每个用户元素的名称,而不是所有用户都使用
LogOnUser
作为开头标记,而是每个用户都有一个不同的标记?如果我理解正确的话,前者是更常见的方法。为携带相同类型信息的XML元素(即用户)使用不同的标记名会使XML非常尴尬找到某个用户应该像添加
Where()
一样简单,对吗
XMLUser.subjections(“LogOnUser”).Where(o=>(string)o.Attribute(“UserName”)==“User2”)
再次感谢,这正是我想要的!太好了,非常感谢!然后我将如何搜索不同的用户?显然,现在我只有2个,但可能会更多。我是否需要搜索用户,比如他们的用户名?或者更容易更改每个用户元素的名称,而不是所有用户都使用
LogOnUser
作为开头标记,而是每个用户都有一个不同的标记?如果我理解正确的话,前者是更常见的方法。为携带相同类型信息的XML元素(即用户)使用不同的标记名会使XML非常尴尬找到某个用户应该像添加
Where()
一样简单,对吗
XMLUser.subjections(“LogOnUser”).Where(o=>(string)o.Attribute(“UserName”)==“User2”)
再次感谢,这正是我想要的!