2011-12-10 8 views
0

私は変数に保存されているコントローラ名とアクション名を持つサンプルXMLコントローラーで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> 

を持っています。私はこのXMLを検索し、対応するappgroupproductcode値をフェッチする必要があり、これらの値に基づいて

var cntName; 
var actName; 

注: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); 

おかげで、 ADARSH

+0

は、それは 'actName'であることを、右です'Name'属性の値は? 'cntName'とは何ですか? –

+0

Hmmm 2つの異なる名前属性があります.1つは外部レベルにあるコントローラ用、もう1つはコントローラノード内にあるアクション用です。間違っていて別の名前を付ける必要があります。 – KeenUser

+0

ああ、OK!最初に 'Lookup'タグが見えませんでしたか? 「mvc」タグはASP.NET MVCを意味しますか? –

答えて

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; 
    

UPDATE:もちろん

、あなたがXPathを使用することができますLINQのツー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; 
+0

ありがとう、ここで他の値を読むことができますか? – KeenUser

+0

@AdarshK:回答を更新しました –

+0

他の亜種も更新しました –