根据权限解析xmldocument

时间:2013-04-09 10:12:50

标签: c# xml xml-parsing

我一直在处理这个xml文档很长一段时间,现在事实证明用户应该能够根据xml文档中定义的权限级别查看某些字段。这就是文档之前看到的内容:

<?xml version="1.0" encoding="utf-8" ?> 
<AccessControl>
    <Field>
      <name>First_Name</name>
      <label>First Name</label>
    </Field>
    <Field>
      <name>Last_Name</name>
      <label>Last Name</label>
    </Field>
......
.....
</AccessControl>

这是如何解析文档的:

doc.Load(System.Web.Hosting.HostingEnvironment.MapPath("~/ConfigFile.xml"));
XmlNode root = doc.DocumentElement;
XmlNodeList xnList = root.SelectNodes("/AccessControl/Field");
 foreach (XmlNode xn in xnList)
 {
     string fieldName = xn["name"].InnerText;
     .....
     ....
}

现在我在文档中添加了一些权限节点,其中包含field个节点,类似于:

<AccessControl>
  <Permission Name = "permissionXYZ" >
    <Field>
      <name>First_Name</name>
      <label>First Name</label>
    </Field>
    <Field>
      <name>Last_Name</name>
      <label>Last Name</label>
    </Field>
    ....
  </Permission>
  <Permission Name = "permission123" >
    <Field>
    ...
    ...
    </Field>
  </Permission>
</AccessControl>

如何根据文档中定义的权限仅获取必填字段?

1 个答案:

答案 0 :(得分:1)

使用LINQ,您可以根据属性值进行过滤,然后选择Fields。我的示例中的Test.xml文件只包含您的示例XML。

    XDocument document = XDocument.Load("c:\\temp\\test.xml");
    var fields = document.Descendants("Permission")
                .Where(i => i.Attribute("Name") != null && i.Attribute("Name").Value == "permissionXYZ")
                .Select(i => i.Descendants("Field"));