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値をフェッチする必要があります。

注:の値の例cntNameは、Activity1またはActivity2またはActivityNです。
の値の例actNameは、EditActivity1またはEditActivity2またはEditActivityNです。

したがって、これらの値に基づいて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;
    

アップデート:

もちろん、Linq-to-XML で xPath を使用することもできます。

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 に答える