2010-04-09 3 views
1

j'ai la structure suivante d'objet, deseralized de XML (WS):interrogation éléments de tableau imbriqués dans C#

<ns2:Category> 
    <ns2:CategoryId>800003</ns2:CategoryId> 
    <ns2:CategoryName>Name1</ns2:CategoryName> 
    <ns2:Categories> 
    <ns2:Category> 
     <ns2:CategoryId>800008</ns2:CategoryId> 
     <ns2:CategoryName>Name2</ns2:CategoryName> 
     <ns2:Categories> 
     <ns2:Category> 
      <ns2:CategoryId>800018</ns2:CategoryId> 
      <ns2:CategoryName>Name3</ns2:CategoryName> 
      <ns2:Categories/> 
     </ns2:Category> 
     <ns2:Category> 
      <ns2:CategoryId>800028</ns2:CategoryId> 
      <ns2:CategoryName>Name4</ns2:CategoryName> 
      <ns2:Categories/> 
     </ns2:Category> 
     </ns2:Categories> 
    </ns2:Category> 
    <ns2:Category> 
     <ns2:CategoryId>800009</ns2:CategoryId> 
     <ns2:CategoryName>Name5</ns2:CategoryName> 
     <ns2:Categories> 
     <ns2:Category> 
      <ns2:CategoryId>800019</ns2:CategoryId> 
      <ns2:CategoryName>Name6</ns2:CategoryName> 
      <ns2:Categories> 
      <ns2:Category> 
       <ns2:CategoryId>800119</ns2:CategoryId> 
       <ns2:CategoryName>Name7</ns2:CategoryName> 
       <ns2:Categories/> 
      </ns2:Category> 
      <ns2:Category> 
       <ns2:CategoryId>800219</ns2:CategoryId> 
       <ns2:CategoryName>Name111</ns2:CategoryName> 
       <ns2:Categories/> 
      </ns2:Category> 
      </ns2:Categories> 
     </ns2:Category> 
     </ns2:Categories> 
    </ns2:Category> 
    </ns2:Categories> 
</ns2:Category> 

Comment puis-je trouver l'objet de catégorie avec CategoryId 800119 efficacement? Donc, je cherche quelque chose comme FindCategory (long categoryId) - Préférablement avec LINQ aux objets. Une autre option?

Répondre

3

j'utiliser LINQ to XML:

XNamespace ns = "http://url-for-ns2"; 
XDocument doc = XDocument.Load("file.xml"); 

string requiredId = "800119"; 
var categoryId = doc.Desendants(ns + "CategoryId") 
        .Where(x => x.Value == requiredId) 
        .FirstOrDefault(); 
var category = categoryId == null ? null : categoryId.Parent; 
+0

Pensez-vous que sage-performace vaut mieux sérialiser l'objet et faire le LINQ to XML. J'ai la structure d'objet déjà mise en cache. –

+0

Il est peu probable que cela corresponde à la sérialisation en XML, mais vous n'avez pas montré la structure de votre objet. Je m'attends à ce que ce ne soit pas difficile de faire quelque chose de similaire - en particulier s'il s'agit de classes partielles, donc vous pouvez ajouter un appel récursif dans la catégorie. –

Questions connexes