C# 如何使用c读取此代码覆盖率xml文件报告#

C# 如何使用c读取此代码覆盖率xml文件报告#,c#,xml,visual-studio,C#,Xml,Visual Studio,读取此xml文件要获取程序集名称及其值小于95的覆盖率百分比,我需要读取代码覆盖率值小于95%的程序集名称,并将程序集名称和覆盖率百分比存储在对象中 <?xml version="1.0" encoding="UTF-8"?> -<Root DotCoverVersion="2021.1.2" ReportType="Xml" CoveragePercent="97"

读取此xml文件要获取程序集名称及其值小于95的覆盖率百分比,我需要读取代码覆盖率值小于95%的程序集名称,并将程序集名称和覆盖率百分比存储在对象中

  <?xml version="1.0" encoding="UTF-8"?>
    -<Root DotCoverVersion="2021.1.2" ReportType="Xml" CoveragePercent="97" TotalStatements="108" CoveredStatements="105">
    -<Assembly CoveragePercent="94" TotalStatements="54" CoveredStatements="51" Name="ClassLibrary1">
    -<Namespace CoveragePercent="94" TotalStatements="54" CoveredStatements="51" Name="ClassLibrary1">
    -<Type CoveragePercent="94" TotalStatements="54" CoveredStatements="51" Name="Class1">
    <Method CoveragePercent="100" TotalStatements="3" CoveredStatements="3" Name="Add(int,int):int"/>
    <Method CoveragePercent="100" TotalStatements="16" CoveredStatements="16" Name="Armstrong(int):string"/>
    <Method CoveragePercent="100" TotalStatements="5" CoveredStatements="5" Name="Decision(int):int"/>
    <Method CoveragePercent="79" TotalStatements="14" CoveredStatements="11" Name="isApplicable(int):string"/>
    <Method CoveragePercent="100" TotalStatements="3" CoveredStatements="3" Name="sub(int,int):int"/>
    <Method CoveragePercent="100" TotalStatements="13" CoveredStatements="13" Name="total(int):int"/>
    </Type>
    </Namespace>
    </Assembly>
    -<Assembly CoveragePercent="100" TotalStatements="54" CoveredStatements="54" Name="UnitTestProject2">
    -<Namespace CoveragePercent="100" TotalStatements="54" CoveredStatements="54" Name="UnitTestProject2">
    -<Type CoveragePercent="100" TotalStatements="54" CoveredStatements="54" Name="TestDemo">
    <Method CoveragePercent="100" TotalStatements="5" CoveredStatements="5" Name="Test_Add():void"/>
    <Method CoveragePercent="100" TotalStatements="5" CoveredStatements="5" Name="Test_Armstrong_False():void"/>
    <Method CoveragePercent="100" TotalStatements="5" CoveredStatements="5" Name="Test_Armstrong_InvalidNumber():void"/>
    <Method CoveragePercent="100" TotalStatements="5" CoveredStatements="5" Name="Test_Armstrong_True():void"/>
    <Method CoveragePercent="100" TotalStatements="5" CoveredStatements="5" Name="Test_Decision_False():void"/>
    <Method CoveragePercent="100" TotalStatements="5" CoveredStatements="5" Name="Test_Decision_True():void"/>
    <Method CoveragePercent="100" TotalStatements="5" CoveredStatements="5" Name="Test_isApplicable_Applicable():void"/>
    <Method CoveragePercent="100" TotalStatements="5" CoveredStatements="5" Name="Test_isApplicable_NotValidAge():void"/>
    <Method CoveragePercent="100" TotalStatements="5" CoveredStatements="5" Name="Test_Sub():void"/>
    <Method CoveragePercent="100" TotalStatements="9" CoveredStatements="9" Name="Test_total():void"/>
    </Type>
    </Namespace>
    </Assembly>
    </Root>

-
-
-
-
-
-
-

这是xml文件。

您可以尝试使用以下代码来使用
XDocument
获得值小于95的程序集名称和覆盖率百分比

   string path = "E:\\test.xml";
    XDocument doc = XDocument.Load(path);
    var result = doc.Descendants("Assembly").Where(i => Convert.ToInt32(i.Attribute("CoveragePercent").Value) < 95);
    foreach (var item in result)
    {
        Console.WriteLine(item.Attribute("CoveragePercent").Value);
        Console.WriteLine(item.Attribute("Name").Value);
    }
string path=“E:\\test.xml”;
XDocument doc=XDocument.Load(路径);
var result=doc.subjects(“Assembly”)。其中(i=>Convert.ToInt32(i.Attribute(“CoveragePercent”).Value)<95);
foreach(结果中的var项目)
{
Console.WriteLine(item.Attribute(“CoveragePercent”).Value);
Console.WriteLine(item.Attribute(“Name”).Value);
}
结果:

尝试以下操作:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Xml;
using System.Xml.Linq;

namespace ConsoleApplication
{
    public class Program
    {
        const string FILENAME = @"c:\temp\test.xml";
        public static void Main(string[] args)
        {
            XDocument doc = XDocument.Load(FILENAME);
            XElement xRoot = doc.Root;
            Root root = new Root() {
                DotCoverVersion = (string)xRoot.Attribute("DotCoverVersion"),
                ReportType = (string)xRoot.Attribute("ReportType"),
                CoveragePercent = (int)xRoot.Attribute("CoveragePercent"),
                TotalStatements = (int)xRoot.Attribute("TotalStatements"),
                CoveredStatements  = (int)xRoot.Attribute("CoveredStatements"),
                Level = 0
            };

            Node.GetNodes(xRoot, null, 1);

            List<Node> lowCoverage = Root.Nodes.Where(x => x.CoveragePercent < 95).ToList();
            foreach (Node node in lowCoverage)
            {
                Console.WriteLine("Name = {0}, Percentage = {1}", node.Name, node.CoveragePercent.ToString());
            }
            Console.ReadLine();

        }
    }
    public class Root
    {
        public string DotCoverVersion { get; set; }
        public string ReportType { get; set; }
        public int CoveragePercent { get; set; }
        public int TotalStatements { get; set; }
        public int CoveredStatements { get; set; }
        public static List<Node> Nodes = new List<Node>();
        public int Level { get; set; }
    }
    public class Node: Root
    {
        public string Name { get; set; }
        public string TagName { get; set; }
        public Node ParentNode { get; set; }

        public static void GetNodes(XElement xParent, Node parentNode, int level)
        {
            foreach (XElement child in xParent.Elements())
            {
                Node newNode = new Node();
                Root.Nodes.Add(newNode);
                newNode.Name = (string)child.Attribute("Name");
                newNode.TagName = child.Name.LocalName;
                newNode.ParentNode = parentNode;
                newNode.Level = level;
                newNode.TotalStatements = (int)child.Attribute("TotalStatements");
                newNode.CoveragePercent = (int)child.Attribute("CoveragePercent");
                newNode.CoveredStatements = (int)child.Attribute("CoveredStatements");
                GetNodes(child, newNode, level + 1);
            }
        }
    }

}
使用系统;
使用System.Collections.Generic;
使用System.Linq;
使用系统文本;
使用System.Xml;
使用System.Xml.Linq;
命名空间控制台应用程序
{
公共课程
{
常量字符串文件名=@“c:\temp\test.xml”;
公共静态void Main(字符串[]args)
{
XDocument doc=XDocument.Load(文件名);
XElement xRoot=单据根;
根根=新根(){
DotCoverVersion=(字符串)xRoot.Attribute(“DotCoverVersion”),
ReportType=(字符串)xRoot.Attribute(“ReportType”),
CoveragePercent=(int)xRoot.Attribute(“CoveragePercent”),
TotalStatements=(int)xRoot.Attribute(“TotalStatements”),
CoveredStatements=(int)xRoot.Attribute(“CoveredStatements”),
级别=0
};
GetNodes(xRoot,null,1);
List lowCoverage=Root.Nodes.Where(x=>x.CoveragePercent<95).ToList();
foreach(低覆盖率中的节点)
{
WriteLine(“Name={0},Percentage={1}”,node.Name,node.CoveragePercent.ToString());
}
Console.ReadLine();
}
}
公共类根
{
公共字符串DotCoverVersion{get;set;}
公共字符串报告类型{get;set;}
公共int覆盖率百分比{get;set;}
公共int TotalStatements{get;set;}
公共int CoveredStatements{get;set;}
公共静态列表节点=新列表();
公共整数级别{get;set;}
}
公共类节点:根
{
公共字符串名称{get;set;}
公共字符串标记名{get;set;}
公共节点ParentNode{get;set;}
公共静态void GetNodes(XElement xParent、节点parentNode、int级别)
{
foreach(xParent.Elements()中的XElement子级)
{
Node newNode=新节点();
Root.Nodes.Add(newNode);
newNode.Name=(string)child.Attribute(“Name”);
newNode.TagName=child.Name.LocalName;
newNode.ParentNode=ParentNode;
newNode.Level=Level;
newNode.TotalStatements=(int)child.Attribute(“TotalStatements”);
newNode.CoveragePercent=(int)child.Attribute(“CoveragePercent”);
newNode.CoveredStatements=(int)child.Attribute(“CoveredStatements”);
GetNodes(子节点、新节点、级别+1);
}
}
}
}

非常感谢:)