0

我有一个示例 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值。

注意:示例值为cntNameActivity1或。的 示例值为或或。Activity2ActivityN
actNameEditActivity1EditActivity2EditActivityN

因此,基于这些值,我必须查找 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);

谢谢, 阿达什

4

1 回答 1

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;
    

更新:

当然,您也可以将 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;
于 2011-12-10T10:00:56.553 回答