使用XMlReader读取IEnumerable <xelement>中的每个节点

时间:2017-07-25 12:20:46

标签: c# linq-to-xml xmlreader xelement system.xml

我有IEnumerable<XElement> theTestCaseNodes,其中包含以下类型的XElements

<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 个答案:

答案 0 :(得分: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属性访问正确的步骤

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
}