2013-04-09 71 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"));