首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >我想在Powrshell中计算xml文件的属性。

我想在Powrshell中计算xml文件的属性。
EN

Stack Overflow用户
提问于 2022-05-31 11:34:01
回答 1查看 55关注 0票数 0

这是我的XML文件内容,其中我希望计数属性,例如名称、失败、跳过的

作为输出,我想要这样的东西:

代码语言:javascript
复制
> Total name = 2, 
>Total failures =1, 
>Total Skipped =0,
>Total passed = 1
> 

在我的xml文件中,attribute =0类似于pass,1类似fail

代码语言:javascript
复制
<?xml version="1.0" encoding="utf-8"?>
<testsuites>
    <testsuite name="TVIA_Gold" tests="2" failures="0" skipped="0" time="48.5294792" timestamp="2022-05-27T10:28:20" id="3a03e3e7-7cb8-da92-8a08-b369c6fd15af" log="">
        <testcase name="Gold Price Option" time="63789244138.9715" timestamp="" log="+ Passed Gold Price Option&#xD;&#xA;+ Passed  Close all instace of Edge Browser {LogInfo='Started 'taskkill' with arguments '/f /im msedge.exe''}&#xD;&#xA;&#xD;&#xA;+ Passed  TBox Wait {LogInfo='Waited for &gt;5000&lt; milliseconds.'}&#xD;&#xA;&#xD;&#xA;+ Passed  Open Application&#xD;&#xA;&#xD;&#xA;+ Passed  Navigate to Enter Vehicle Data page for Automobile&#xD;&#xA;+ Passed   Automobile {LogInfo='WaitOn was successful.&#xD;&#xA;Expected value: &quot;== True&quot;&#xD;&#xA;Actual value: &quot;True&quot;',UsedValue='True'}&#xD;&#xA;+ Passed   Automobile {UsedValue='X'}&#xD;&#xA;&#xD;&#xA;+ Passed  Screenshot Navigate to Enter Vehicle Data page for Automobile {LogInfo='The screenshot was successfully created.'}&#xD;&#xA;&#xD;&#xA;+ Passed  Enter Vehicle Data and Click on Next&#xD;&#xA;+ Passed   Make {LogInfo='WaitOn was successful.&#xD;&#xA;Expected value: &quot;== True&quot;&#xD;&#xA;Actual value: &quot;True&quot;',UsedValue='True'}&#xD;&#xA;+ Passed   Make {UsedValue='True'}&#xD;&#xA;+ Passed   Engine Performance [kW] {UsedValue='150'}&#xD;&#xA;+ Passed   Date of Manufacture (MM/DD/YYYY) {UsedValue='05/17/2018'}&#xD;&#xA;+ Passed   Number of Seats {UsedValue='True'}&#xD;&#xA;+ Passed   Fuel Type {UsedValue='True'}&#xD;&#xA;+ Passed   List Price [$] {UsedValue='10000'}&#xD;&#xA;+ Passed   Annual Mileage [mi] {UsedValue='10000'}&#xD;&#xA;+ Passed   Next {UsedValue='X'}&#xD;&#xA;&#xD;&#xA;+ Passed  Screenshot Enter Vehicle Data and Click on Next {LogInfo='The screenshot was successfully created.'}&#xD;&#xA;&#xD;&#xA;+ Passed  Enter Insurant Data and Click on Next&#xD;&#xA;+ Passed   First Name {LogInfo='WaitOn was successful.&#xD;&#xA;Expected value: &quot;== True&quot;&#xD;&#xA;Actual value: &quot;True&quot;',UsedValue='True'}&#xD;&#xA;+ Passed   First Name {UsedValue='Shawn'}&#xD;&#xA;+ Passed   Last Name {UsedValue='Frost'}&#xD;&#xA;+ Passed   Date of Birth (MM/DD/YYYY) {UsedValue='05/27/1992'}&#xD;&#xA;+ Passed   Gender {UsedValue='x'}&#xD;&#xA;+ Passed   Street Address {UsedValue='First  Avenue'}&#xD;&#xA;+ Passed   Country {UsedValue='True'}&#xD;&#xA;+ Passed   Zip Code {UsedValue='20011'}&#xD;&#xA;+ Passed   City {UsedValue='New York'}&#xD;&#xA;+ Passed   Occupation {UsedValue='True'}&#xD;&#xA;+ Passed   Other {UsedValue='True'}&#xD;&#xA;+ Passed   Next » {UsedValue='X'}&#xD;&#xA;&#xD;&#xA;+ Passed  Screenshot Enter Insurant Data and Click on Next {LogInfo='The screenshot was successfully created.'}&#xD;&#xA;&#xD;&#xA;+ Passed  Enter Product Data and Click Next&#xD;&#xA;+ Passed   Start Date (MM/DD/YYYY) {LogInfo='WaitOn was successful.&#xD;&#xA;Expected value: &quot;== True&quot;&#xD;&#xA;Actual value: &quot;True&quot;',UsedValue='True'}&#xD;&#xA;+ Passed   Start Date (MM/DD/YYYY) {UsedValue='07/07/2022'}&#xD;&#xA;+ Passed   Insurance Sum {UsedValue='True'}&#xD;&#xA;+ Passed   Merit Rating {UsedValue='True'}&#xD;&#xA;+ Passed   Damage Insurance {UsedValue='True'}&#xD;&#xA;+ Passed   Legal Defence Insurance {UsedValue='True'}&#xD;&#xA;+ Passed   Courtesy Car {UsedValue='True'}&#xD;&#xA;+ Passed   Next {UsedValue='X'}&#xD;&#xA;&#xD;&#xA;+ Passed  Screenshot Enter Product Data and Click Next {LogInfo='The screenshot was successfully created.'}&#xD;&#xA;&#xD;&#xA;+ Passed  Select Price Option and Click Next&#xD;&#xA;+ Passed   priceTable {LogInfo='WaitOn was successful.&#xD;&#xA;Expected value: &quot;== True&quot;&#xD;&#xA;Actual value: &quot;True&quot;',UsedValue='True'}&#xD;&#xA;+ Passed   View Quote {UsedValue='X'}&#xD;&#xA;&#xD;&#xA;+ Passed  Screenshot Select Price Option and Click Next {LogInfo='The screenshot was successfully created.'}&#xD;&#xA;&#xD;&#xA;+ Passed  Close Edge Browser {LogInfo='Started 'taskkill' with arguments '/f /im msedge.exe''}&#xD;&#xA;&#xD;&#xA;" />
        <testcase name="Print PDF Report" time="63789244141.0105" timestamp="" log="+ Passed Print PDF Report&#xD;&#xA;+ Passed  Print PDF Report {LogInfo='Started 'C:\Tosca_Projects\TCShell\Execution.bat' with arguments '&quot;/6_UsersInTraining/Arkamauli Ghosh/Import_import220517_1115/Test_Env_TestCase/DEX_Execution_TestCase/Component/Dex_Execution/TVIA_Gold/TVIA_Gold&quot; TVIA_Gold SETF\DealerPortal''}&#xD;&#xA;&#xD;&#xA;" />
    </testsuite>
    <testsuite name="TVIA_Silver" tests="2" failures="1" skipped="0" time="35.8853641" timestamp="2022-05-27T10:27:12" id="3a03e3e7-7cb9-2606-517a-6a00b34ca528" log="">
        <testcase name="Silver Price Option" time="63789244060.9361" timestamp="" log="  Error Silver Price Option&#xD;&#xA;+ Passed  Close all instace of Edge Browser {LogInfo='Started 'taskkill' with arguments '/f /im msedge.exe''}&#xD;&#xA;&#xD;&#xA;+ Passed  TBox Wait {LogInfo='Waited for &gt;5000&lt; milliseconds.'}&#xD;&#xA;&#xD;&#xA;+ Passed  Open Application&#xD;&#xA;&#xD;&#xA;  Error  Navigate to Enter Vehicle Data page for Automobile {LogInfo='&#xD;&#xA;Version 20.0.0.13 of the Edge Addon has been detected. Please install version 21.x.x.x of the Addon for your Edge.'}&#xD;&#xA;&#xD;&#xA;+ Passed  Screenshot Navigate to Enter Vehicle Data page for Automobile {LogInfo='The screenshot was successfully created.'}&#xD;&#xA;&#xD;&#xA;  Error  Enter Vehicle Data and Click on Next {LogInfo='&#xD;&#xA;Version 20.0.0.13 of the Edge Addon has been detected. Please install version 21.x.x.x of the Addon for your Edge.'}&#xD;&#xA;&#xD;&#xA;+ Passed  Screenshot Enter Vehicle Data and Click on Next {LogInfo='The screenshot was successfully created.'}&#xD;&#xA;&#xD;&#xA;  Error  Enter Insurant Data and Click on Next {LogInfo='&#xD;&#xA;Version 20.0.0.13 of the Edge Addon has been detected. Please install version 21.x.x.x of the Addon for your Edge.'}&#xD;&#xA;&#xD;&#xA;+ Passed  Screenshot Enter Insurant Data and Click on Next {LogInfo='The screenshot was successfully created.'}&#xD;&#xA;&#xD;&#xA;  Error  Enter Product Data and Click Next {LogInfo='&#xD;&#xA;Version 20.0.0.13 of the Edge Addon has been detected. Please install version 21.x.x.x of the Addon for your Edge.'}&#xD;&#xA;&#xD;&#xA;+ Passed  Screenshot Enter Product Data and Click Next {LogInfo='The screenshot was successfully created.'}&#xD;&#xA;&#xD;&#xA;  Error  Select Price Option and Click Next {LogInfo='&#xD;&#xA;Version 20.0.0.13 of the Edge Addon has been detected. Please install version 21.x.x.x of the Addon for your Edge.'}&#xD;&#xA;&#xD;&#xA;+ Passed  Screenshot Select Price Option and Click Next {LogInfo='The screenshot was successfully created.'}&#xD;&#xA;&#xD;&#xA;+ Passed  Close Edge Browser {LogInfo='Started 'taskkill' with arguments '/f /im msedge.exe''}&#xD;&#xA;&#xD;&#xA;">
            <failure message="Test failure">  Error Silver Price Option</failure>
        </testcase>
        <testcase name="Print PDF Report" time="63789244062.6585" timestamp="" log="+ Passed Print PDF Report&#xD;&#xA;+ Passed  Print PDF Report {LogInfo='Started 'C:\Tosca_Projects\TCShell\Execution.bat' with arguments '&quot;/6_UsersInTraining/Arkamauli Ghosh/Import_import220517_1115/Test_Env_TestCase/DEX_Execution_TestCase/Component/Dex_Execution/TVIA_Silver/TVIA_Silver&quot; TVIA_Silver SET\VehiclePortal''}&#xD;&#xA;&#xD;&#xA;" />
    </testsuite>
</testsuites>

我被困住了,因为我没有将属性作为对象存储为int,然后将其作为输出进行计算,我认为我对PowerShell有点滞后,因为我对它非常陌生,下面是我用来让XML文件解析的小代码。

代码语言:javascript
复制
$paths = "C:\imp\TestReport.xml"
[xml]$XmlDocument = Get-Content -Path $paths
$XmlDocument.GetType().FullName
#$XmlDocument.testsuites.testsuite | Format-Table -AutoSize | 

$info = $XmlDocument.testsuites.testsuite | Format-Table -AutoSize

#Write-Output $info
EN

回答 1

Stack Overflow用户

发布于 2022-05-31 13:05:48

这样做的一种方法是

代码语言:javascript
复制
$xml = [System.Xml.XmlDocument]::new()
$xml.Load('C:\imp\TestReport.xml')
$result = [PsCustomObject]@{
    'Total TestSuites' = $xml.testsuites.testsuite.Count
    'Total Failures'   = (([int[]]$xml.testsuites.testsuite.failures | Measure-Object -Sum).Sum
    'Total Skipped'    = (([int[]]$xml.testsuites.testsuite.skipped | Measure-Object -Sum).Sum
    'Total Passed'     = $totalTestSuites - $totalFailures
}

$result | Format-List

使用示例XML,它将输出

代码语言:javascript
复制
Total TestSuites : 2
Total Failures   : 1
Total Skipped    : 0
Total Passed     : 1
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/72447065

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档