代码之家  ›  专栏  ›  技术社区  ›  Diana

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

  •  0
  • Diana  · 技术社区  · 9 年前

    IEnumerable<XElement> theTestCaseNodes 有以下几种元素

    <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>
    

    请帮助如何继续!!

    public void ExecuteTestcase(IEnumerable<XElement> theTestCaseNodes)
    {
        using (XmlReader aNodeReader = XmlReader.ReadSubtree()) {
    
        }
    }
    
    1 回复  |  直到 9 年前
        1
  •  0
  •   Fabio    9 年前

    使用 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
    }
    

    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
    }