2010-08-11 4 views
1

mon xml est ci-dessous:Comment le chargement des fichiers XML à partir d'un fichier

<Demo> 
    <ClientCompanyId CompanyId="1"> 
     <MyMenu> 
      <module MenuType="0" ModID="Mod1" ModuleID="1" Perm="False" Text="Basic Settings"> 
       <menu MID="1-1" MenuDescription="Mod" MenuType="0" ModuleID="1" ParentID="Mod1" Perm="False" Text="Forms"> 
        <Leaf LeafNode="true" MID="1-3" MenuDescription="" MenuType="0" ModuleID="1" ModuleMenuID="1-3" ParentID="1" Perm="False" TargetUrl="" Text="LookUp"/> 
        <submenu MID="1-4" MenuDescription="" MenuType="0" ModuleID="1" ParentID="1" Perm="False" Text="Bank Branch"> 
         <Leaf LeafNode="true" MID="1-5" MenuDescription="" MenuType="0" ModuleID="1" ModuleMenuID="1-5" ParentID="4" Perm="False" TargetUrl="" Text="BO Category"/> 
        </submenu> 
       </menu> 
       <menu MID="1-2" MenuDescription="Mod" MenuType="0" ModuleID="1" ParentID="Mod1" Perm="False" Text="Reports"> 
        <Leaf LeafNode="true" MID="1-6" MenuDescription="" MenuType="0" ModuleID="1" ModuleMenuID="1-6" ParentID="2" Perm="False" TargetUrl="" Text="Cheque Type"/> 
        <Leaf LeafNode="true" MID="1-7" MenuDescription="" MenuType="0" ModuleID="1" ModuleMenuID="1-7" ParentID="2" Perm="False" TargetUrl="" Text="Stock Exchange"/> 
       </menu> 
      </module> 
     </MyMenu> 
    </ClientCompanyId> 
</Demo> 

ma syntaxe LINQ est ci-dessous:

XDocument loaded = XDocument.Load(@"C:\Menu_Settings.xml"); 
var q = from c in loaded.Descendants("module") 
where (int)c.Attribute("ModuleID") < 0 
select (string)c.Attribute("Text"); 

A partir du fichier xml ci-dessus que je veux obtenir attribue des valeurs d'attributs.

Text="Basic Settings" ModID="Mod1" ModuleID="1" MenuType="0" Perm="False" 

De xml ci-dessus que je veux obtenir toutes les valeurs des attributs de balises .

Comment obtenir la valeur d'un fichier xml?

Répondre

0

Ou vous pouvez dans la dernière étape jeter à XElement et utiliser tous les XElement a à offrir:

au lieu de var q:

IEnumerable<XElement> q =from c in loaded.Descendants("module") 
        where (int)c.Attribute("ModuleID").Value < 0 
        select c; 

foreach(XElement e in q){ 
    string t = e.Attribute("Text").Value; 
    // etc... 
} 

si vous connaissez un enregistrement va être revenir

XElement q = (from c in loaded.Descendants("module") 
        where (int)c.Attribute("ModuleID").Value < 0 
        select c).First(); // one of many options to return a single record 

sring t = q.Attribute("Text").Value; 
// etc... 

MISE À JOUR

pour faire d'autres requêtes à votre résultat:

IEnumarble<XElement> menus = q.Elements("menu"); 

puis boucle foreach, vous pouvez utiliser menuselement.Element("tag_name").Value pour obtenir des valeurs de chaîne des nœuds, ou menuselement.Attribute("attr_name").Value pour obtenir des valeurs d'attribut, et vous pouvez en outre requête avec menuslement.Find ou menuselement.Where ou menuselement.Select et les options sont vraiment illimitées ... voici où vous pouvez en savoir plus: http://msdn.microsoft.com/en-us/library/bb387065.aspx

et voici MSDN de comment interroger xml LINQ: http://msdn.microsoft.com/en-us/library/bb943906.aspx

+0

je ne suis pas sûr à 100% de (int) de lancer, si cela fonctionne pour vous génial, mais cela ne fonctionne jamais pour moi, je dois généralement aller avec Convert.toInt16 (val) – Ayyash

+0

Comment sélectionner toutes les valeurs de tag de menu. contient leaf, submenu tag's.want pour sélectionner toutes les valeurs de l'étiquette de menu et remplir AspxMenu de cette valeur. – shamim

2

Eh bien il semble que vous y êtes presque:

XDocument loaded = XDocument.Load(@"C:\Menu_Settings.xml"); 

var q = from c in loaded.Descendants("module") 
     where (int)c.Attribute("ModuleID") < 0 
     select new 
     { 
      Text = (string) c.Attribute("Text"), 
      ModID = (string) c.Attribute("ModID"), 
      ModuleID = (int) c.Attribute("ModuleID"), 
      MenuType = (int) c.Attribute("MenuType"), 
      Perm = (bool) c.Attribute("Perm") 
     }; 

Si cela ne vous aide pas, s'il vous plaît donner plus de détails.

+0

Salut Jon, vous êtes m l'émission de virgules à la fin de certaines lignes ici je pense? – AndrewC

+0

@AndyC: Yup, va réparer. –

+0

merci pour l'aide .... – shamim

Questions connexes