2017-07-25 67 views
0

我有IEnumerable<XElement> theTestCaseNodes它具有以下一种XElements阅读的IEnumerable <XElement>每个节点使用的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> 

基本上这是我的测试用例的,我想在一个顺序来执行它们。 所以,现在我想使用XMLReader读取IEnumerable中的每个节点。

请帮助如何着手!

我明白我需要使用“使用”,但不知道如何继续。

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

    } 
} 
+1

你可以写你的XML到一个字符串,创建一个'StringReader'并将它传递给'XmlReader'。注意你必须在'using'中'创建'一个阅读器,然后你可以调用像'ReadSubtree'这样的实例方法。 – juharr

+0

_你为什么要使用XmlReader?这用于将文本转换为DOM,但您已经有DOM级别的元素。 –

+0

@HenkHolterman,请让我知道更多关于此。我是XML的新手。我想在这里使用XMLReader,因为我想按顺序排列。有2种步骤,“type = Action”和“type = check”,我想按顺序阅读它们。 – Diana

回答

0

使用XElement.CreateReader实例化XmlReader的元素。

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

XNode.CreateReader Method()

如果XmlReader主要目的是读取正确的顺序,然后通过元素的循环将在相同的顺序执行这些元素出现在XML

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

如果你不想依靠你的XML的顺序,然后你可以访问正确的步骤type属性

​​