读取xml并在控制器中查找?

时间:2011-12-10 09:39:14

标签: xml asp.net-mvc-3 xmlnode xml-attribute

我有一个示例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并获取相应的appgroupproductcode值。

注意:cntName的示例值为Activity1Activity2ActivityN
actName的示例值为EditActivity1EditActivity2EditActivityN

所以基于这些值我必须查找xml,希望我对我的问题陈述很清楚。

我正在使用传统的xmldatadocument读取我的xml,如何将其更改为LINQ?以下示例。

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

xmlDocAppMod.Load(strFileLocation);

谢谢, 阿达什讷

1 个答案:

答案 0 :(得分:0)

基本上,您有几种选择:

  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;
    
  3. <强>更新

    当然,您也可以将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;