Чтение XML и поиск в контроллере? - PullRequest
0 голосов
/ 10 декабря 2011

У меня есть образец xml

<Lookup> 
    <Controller Name="Activity1" >
       <action Name="Editactivity1" appgroup="Something" productcode="SomethingElse"/>    
    </Controller> 
    <Controller Name="Activity2">    
       <action Name="Editactivity2" appgroup="Something1" productcode="SomethingElse2"/>  
    </Controller>
</Lookup>

У меня имя контроллера и имя действия хранятся в переменных.

var cntName;
var actName;

Основываясь на этих значениях, я должен найти этот XML и получить соответствующие значения appgroup и productcode.

Примечание: примерные значения для cntName будут Activity1 или Activity2 или ActivityN.
Пример значения для actName будет EditActivity1 или EditActivity2 или EditActivityN.

Итак, основываясь на этих значениях, я должен поискать xml, надеюсь, у меня все ясно с формулировкой проблемы.

Я читаю мой xml, используя традиционный xmldatadocument, как мне изменить его на LINQ? Образец ниже.

XmlDocument xmlDocAppMod = new XmlDocument();
strFileName = System.Configuration.ConfigurationManager.AppSettings["AppModOptListPath"].ToString();
strFileLocation = System.Web.HttpContext.Current.Server.MapPath("~/" + strFileName);

xmlDocAppMod.Load(strFileLocation);

Спасибо, Adarsh ​​

1 Ответ

0 голосов
/ 10 декабря 2011

Обычно у вас есть несколько вариантов:

  1. Загрузить документ с диска и создать выражение xPath для его оценки:

    var doc = new XmlDocument();
    doc.Load(fileName);
    var node = doc.SelectSingleNode(
        string.Format("/Lookup/Controller[@Name='{0}']/action[@Name='{1}']", cntName, actName));
    
    if (node != null)
    {
    
            var appGroup = node.Attributes["appgroup"].Value;
            var productcode = node.Attributes["productcode"].Value;
    }
    
  2. Другим вариантом может быть использование XDocument:

        var doc = XDocument.Load("");
        var action = doc.Descendants("Controller")
            .Where(c =>
                       {
                           var controllerName = c.Attribute("Name");
                           return controllerName != null && controllerName.Value.Equals(cntName);
                       })
            .FirstOrDefault()
            .Elements("action")
            .Where(a =>
                       {
                           var controllerName = a.Attribute("Name");
                           return controllerName != null && controllerName.Value.Equals(actName);
                       })
            .FirstOrDefault();
        var appGroup = action.Attribute("appgroup").Value;
        var productCode = action.Attribute("productcode").Value;
    

ОБНОВЛЕНИЕ:

Конечно, вы можете использовать xPath с Linq-to-XML также:

var doc = XDocument.Load("");
var action = (XElement) doc.XPathEvaluate(string.Format("/Lookup/Controller[@Name='{0}']/action[@Name='{1}']", cntName, actName));
var appGroup = action.Attribute("appgroup").Value;
var productCode = action.Attribute("productcode").Value;
...