2013-04-09 7 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")); 
Смежные вопросы