[英]How to read this xml file generated by code metrics, in c#
Read this xml file to get the method names and their cyclomatic value this is the xml file, i need to read the cyclomatic complexity value, and store the method name and the class containing that method in an object.
<?xml version="1.0" encoding="UTF-8"?>
-<CodeMetricsReport Version="1.0">
-<Targets>
-<Target Name="ReadFileCS.csproj">
-<Assembly Name="ReadFileCS, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null">
-<Metrics>
<Metric Name="MaintainabilityIndex" Value="41"/>
<Metric Name="CyclomaticComplexity" Value="19"/>
<Metric Name="ClassCoupling" Value="9"/>
<Metric Name="DepthOfInheritance" Value="1"/>
<Metric Name="SourceLines" Value="149"/>
<Metric Name="ExecutableLines" Value="40"/>
</Metrics>
-<Namespaces>
-<Namespace Name="ReadFileCS">
-<Metrics>
<Metric Name="MaintainabilityIndex" Value="41"/>
<Metric Name="CyclomaticComplexity" Value="19"/>
<Metric Name="ClassCoupling" Value="9"/>
<Metric Name="DepthOfInheritance" Value="1"/>
<Metric Name="SourceLines" Value="149"/>
<Metric Name="ExecutableLines" Value="40"/>
</Metrics>
-<Types>
-<NamedType Name="Program">
-<Metrics>
<Metric Name="MaintainabilityIndex" Value="41"/>
<Metric Name="CyclomaticComplexity" Value="19"/>
<Metric Name="ClassCoupling" Value="9"/>
<Metric Name="DepthOfInheritance" Value="1"/>
<Metric Name="SourceLines" Value="146"/>
<Metric Name="ExecutableLines" Value="40"/>
</Metrics>
-<Members>
-<Method Name="void Program.Main(string[] args)" Line="13" File="C:\Users\320117174\source\repos\ReadFileCS\ReadFileCS\Program.cs">
-<Metrics>
<Metric Name="MaintainabilityIndex" Value="41"/>
<Metric Name="CyclomaticComplexity" Value="19"/>
<Metric Name="ClassCoupling" Value="9"/>
<Metric Name="SourceLines" Value="142"/>
<Metric Name="ExecutableLines" Value="40"/>
</Metrics>
</Method>
</Members>
</NamedType>
</Types>
</Namespace>
</Namespaces>
</Assembly>
</Target>
</Targets>
</CodeMetricsReport>
您可以尝试以下代码,使用linq 到 xml来获取所有的循环值和对应的方法名称和 Class 名称。
string path = @"Test.xml";
XDocument doc = XDocument.Load(path);
var result = doc.Descendants("Metric").Where(i => i.Attribute("Name").Value == "CyclomaticComplexity");
foreach (XElement item in result)
{
if(item.Parent.Parent.Name.ToString()=="Method")
{
Console.WriteLine(item.Attribute("Name").Value + " is " + item.Attribute("Value").Value);
Console.WriteLine("Method is "+item.Parent.Parent.Attribute("Name").Value);
Console.WriteLine("Class Name is "+item.Parent.Parent.Parent.Parent.Attribute("Name").Value);
}
Console.WriteLine("***********************");
}
Console.ReadKey();
结果:
我对您的代码进行了一些更改,并得到了我需要的确切结果
public static void main(string[] args)
{
string path = @"C:\Users\320117174\source\Report1.xml";
XDocument doc = XDocument.Load(path);
var result = doc.Descendants("Metric").Where(i => i.Attribute("Name").Value == "CyclomaticComplexity");
foreach (XElement item in result)
{
// Console.WriteLine(item.Attribute("Name").Value + " is " + item.Attribute("Value").Value);
if (Convert.ToInt32(item.Attribute("Value").Value) > 5)
{
if (item.Parent.Parent.Name.ToString() == "Method")
{
Console.WriteLine(item.Attribute("Name").Value + " is " + item.Attribute("Value").Value);
Console.WriteLine("Method is " + item.Parent.Parent.Attribute("Name").Value);
Console.WriteLine("Class Name is " + item.Parent.Parent.Parent.Parent.Attribute("Name").Value);
Console.WriteLine("***********************");
}
}
}
Console.ReadKey();
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.