簡體   English   中英

無法從XML文檔的兩個以上級別獲得結果

[英]Unable to get results from more than 2 levels deep in XML document

感謝您看我的問題。

我正在使用powershell嘗試解析xml文件並僅獲取我感興趣的信息。在網上查找了一些教程和示例后,我在下面整理了該命令,但根本沒有返回任何結果,可能是因為我沒有正確定位信息。 我只能在$ xml.EnergyReport.Troubleshooter中從文件中獲取信息,但是比這更深的內容都不會返回任何結果,例如$ xml.EnergyReport.Troubleshooter.AnalysisLog.LogEntry

這是我第一次嘗試解析XML文件。 我正在嘗試自動獲取筆記本電腦電池的電池壽命信息,以避免不得不滾動瀏覽龐大的html / xml文檔。

我從網絡上整理的命令是:

$Path = "c:\Users\Public\Desktop\powerreport.xml"
$xml = New-Object -TypeName XML
$xml.Load($Path)
$item = Select-XML -Xml $xml -Xpath '//Troubleshooter[Name="Battery"]'
$item.AnalysisLog.LogEntry.Details.Detail | Select-Object -Property Name, Value

我希望輸出看起來像這樣:

  • 電池ID 11111COMPANY111111
  • 由COMPANY創建
  • 序列號11111
  • 蝙蝠型
  • 電池設計容量62160
  • 上次充滿電36330

僅供參考輸出是從命令

powercfg -energy -xml -output %public%\Desktop\powerreport.xml

我想從名為“電池”的“疑難解答”元素下獲取信息。

以下是來自本地計算機的xml文件的編輯示例:

<?xml version="1.0" encoding="utf-8"?>
 <EnergyReport xmlns="http://schemas.microsoft.com/energy/2007">
  <ReportInformation>
    <ReportGuid>dd3587c9-fe63-4e99-9695-2347b85477c0</ReportGuid>
    <ReportVersion>1.0</ReportVersion>
    <ScanTime>2014-03-14T06:42:19Z</ScanTime>
    <ScanDuration>PT60S</ScanDuration>
  </ReportInformation>
  <Troubleshooter guid="5f159d5d-4dec-4caf-81e5-645d77e05c84">
    <Name>Battery</Name>
    <AnalysisLog>
      <LogEntry guid="76e4b077-bb50-4000-9563-7f5aa0c9dc26">
        <Name>Battery Information</Name>
        <Severity>Informational</Severity>
        <Description></Description>
        <Details>
          <Detail guid="118bf18a-13d4-4226-b207-f2ae1638de8b">
            <Name>Battery ID</Name>
            <Value>11111COMPANY111111</Value>
          </Detail>
          <Detail guid="85b01a9b-bb18-4f71-8d12-6f7dec4b3705">
            <Name>Created by</Name>
            <Value>COMPANY</Value>
          </Detail>
          <Detail guid="2229029f-aa9e-4591-989a-32223a114538">
            <Name>Serial Number</Name>
            <Value>11111</Value>
          </Detail>
          <Detail guid="24e6973f-f544-4a33-876d-359ebc56336e">
        <Name>Type</Name>
            <Value>BAT</Value>
          </Detail>
          <Detail guid="beb3f51a-9d89-42ad-81c4-5f9b7f682fa4">
            <Name>Battery design capacity</Name>
            <Value>62160</Value>
          </Detail>
          <Detail guid="b42aa79e-8ee8-44ae-8a11-5fe87cf2822b">
            <Name>Last full charge</Name>
            <Value>36330</Value>
          </Detail>
        </Details>
      </LogEntry>
    </AnalysisLog>
  </Troubleshooter>
</EnergyReport>

試用以下腳本,該腳本使用PowerShell“ here字符串”內聯聲明XML。

$Xml = @"
<?xml version="1.0" encoding="utf-8"?>
 <EnergyReport xmlns="http://schemas.microsoft.com/energy/2007">
  <ReportInformation>
    <ReportGuid>dd3587c9-fe63-4e99-9695-2347b85477c0</ReportGuid>
    <ReportVersion>1.0</ReportVersion>
    <ScanTime>2014-03-14T06:42:19Z</ScanTime>
    <ScanDuration>PT60S</ScanDuration>
  </ReportInformation>
  <Troubleshooter guid="5f159d5d-4dec-4caf-81e5-645d77e05c84">
    <Name>Battery</Name>
    <AnalysisLog>
      <LogEntry guid="76e4b077-bb50-4000-9563-7f5aa0c9dc26">
        <Name>Battery Information</Name>
        <Severity>Informational</Severity>
        <Description></Description>
        <Details>
          <Detail guid="118bf18a-13d4-4226-b207-f2ae1638de8b">
            <Name>Battery ID</Name>
            <Value>11111COMPANY111111</Value>
          </Detail>
          <Detail guid="85b01a9b-bb18-4f71-8d12-6f7dec4b3705">
            <Name>Created by</Name>
            <Value>COMPANY</Value>
          </Detail>
          <Detail guid="2229029f-aa9e-4591-989a-32223a114538">
            <Name>Serial Number</Name>
            <Value>11111</Value>
          </Detail>
          <Detail guid="24e6973f-f544-4a33-876d-359ebc56336e">
        <Name>Type</Name>
            <Value>BAT</Value>
          </Detail>
          <Detail guid="beb3f51a-9d89-42ad-81c4-5f9b7f682fa4">
            <Name>Battery design capacity</Name>
            <Value>62160</Value>
          </Detail>
          <Detail guid="b42aa79e-8ee8-44ae-8a11-5fe87cf2822b">
            <Name>Last full charge</Name>
            <Value>36330</Value>
          </Detail>
        </Details>
      </LogEntry>
    </AnalysisLog>
  </Troubleshooter>
</EnergyReport>
"@

$Document = Select-Xml -Xml ([xml]$Xml) -XPath /;

$Details = $Document.Node.EnergyReport.Troubleshooter.AnalysisLog.LogEntry.Details.Detail;

foreach ($Detail in $Details) {
    'Name: {0} Value: {1}' -f $Detail.Name, $Detail.Value;
}

該腳本的輸出如下所示:

Name: Battery ID Value: 11111COMPANY111111
Name: Created by Value: COMPANY
Name: Serial Number Value: 11111
Name: Type Value: BAT
Name: Battery design capacity Value: 62160
Name: Last full charge Value: 36330

腳本的重要部分是您深入到XML節點的位置。 您一定要逐步進行,以確保您不會錯過任何重要的事情。

$Document = Select-Xml -Xml ([xml]$Xml) -XPath /;

$Details = $Document.Node.EnergyReport.Troubleshooter.AnalysisLog.LogEntry.Details.Detail;

foreach ($Detail in $Details) {
    'Name: {0} Value: {1}' -f $Detail.Name, $Detail.Value;
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM