2013-04-09 74 views
0

我一直在处理这个xml文档很久,现在事实证明,用户应该能够根据xml文档中定义的权限级别来查看某些字段。这是该文件之前看了什么:根据权限解析xmldocument

<?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

使用LINQ,您可以根据属性值进行过滤,然后选择字段。我的示例中的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"));