2017-07-25 6 views
0

Je IEnumerable<XElement> theTestCaseNodes qui a le genre suivant de XElementschaque nœud IEnumerable <XElement> en utilisant xmlreader

<testcase> 
    <Main> 
     <test_step type ="action"> 
      <Name>Goto</Name> 
      <description>xxxxxxxxx</description>  
     </test_step> 
     <test_step type ="check"> 
      <Name>Click</Name> 
      <description>xxxxxxxxx</description> 
     </test_step> 
    </Main> 
</testcase> 
<testcase> 
    <Main> 
     <test_step type ="action"> 
      <Name>Goto</Name> 
      <description>xxxxxxxxx</description>  
     </test_step> 
     <test_step type ="check"> 
      <Name>Type</Name> 
      <description>xxxxxxxxx</description> 
     </test_step> 
    </Main> 
</testcase> 

En gros, cela est mon testcase et je veux les exécuter dans un ordre. Donc, maintenant je veux lire chaque nœud dans IEnumerable en utilisant XMLReader.

S'il vous plaît, aidez comment procéder !! J'ai compris que je devais utiliser "using" mais je ne sais pas comment procéder.

public void ExecuteTestcase(IEnumerable<XElement> theTestCaseNodes) 
{ 
    using (XmlReader aNodeReader = XmlReader.ReadSubtree()) { 

    } 
} 
+1

Vous pouvez écrire votre fichier XML dans une chaîne, créer un 'StringReader' sur celui-ci et le passer à' XmlReader'. Notez que vous devez 'créer 'un lecteur dans le' using' alors vous pouvez appeler des méthodes d'instance comme 'ReadSubtree'. – juharr

+0

_Pourquoi voulez-vous utiliser XmlReader? Cela est utilisé pour convertir du texte en DOM, mais vous avez déjà des éléments de niveau DOM. –

+0

@HenkHolterman, S'il vous plaît laissez-moi savoir plus à ce sujet. Je suis nouveau à XML.Je veux utiliser XMLReader ici parce que je veux aller dans l'ordre. Il y a 2types d'étapes, "type = Action" et "type = check" et je veux les lire dans l'ordre. – Diana

Répondre

0

Utilisation XElement.CreateReader pour instancier XmlReader pour l'élément.

public void ExecuteTestcase(IEnumerable<XElement> theTestCaseNodes) 
{ 
    foreach(var node in theTestCaseNodes) 
    { 
     using (var reader = node.CreateReader()) 
     { 
      // use XmlReader for testing 
     } 
    } 
} 

XNode.CreateReader Method()

Si objectif principal de XmlReader est en train de lire des éléments dans le bon ordre en boucle puis par les éléments seront les exécuter en même ordre dans lequel ils apparaissent dans xml

foreach(var testStep in theTestCaseNodes.Elements("test_step")) 
{ 
    // execute step 
} 

Si vous ne voulez pas compter sur l'ordre de votre xml puis vous pouvez accéder étape correcte par type attribut

foreach(var testStep in theTestCaseNodes.Elements("Main")) 
{ 
    var action = testStep.Elements("test_step") 
         .First(step => step.Attribute("type") == "action"); 
    var check = testStep.Elements("test_step") 
         .First(step => step.Attribute("type") == "action"); 

    // execute action 
    // execute check 
}