我必須將我的 xml 檔案轉換為 csv 檔案。我真的不知道該怎么做。看了很多帖子,就是沒看懂。。。
這是我的xml:
<?xml version="1.0" encoding="UTF-8"?>
<license_usage xmlns="http://www.example.com/report">
<start_time timestamp="1643670000">2022-01-31T23:00:00 00:00</start_time>
<end_time timestamp="1645615967">2022-02-23T11:32:47 00:00</end_time>
<group_by>hour</group_by>
<license_time_intervals>
<license_time_interval timestamp="1643670000" datetime="2022-01-31T23:00:00 00:00">
<license_count license_type="support_full" reason="login">0</license_count>
<license_count license_type="support_full" reason="extended_contact">0</license_count>
<license_count license_type="support_full">0</license_count>
</license_time_interval>
<license_time_interval timestamp="1643673600" datetime="2022-02-01T00:00:00 00:00">
<license_count license_type="support_full" reason="login">2</license_count>
<license_count license_type="support_full" reason="extended_contact">0</license_count>
<license_count license_type="support_full">2</license_count>
</license_time_interval>
<license_time_interval timestamp="1643677200" datetime="2022-02-01T01:00:00 00:00">
<license_count license_type="support_full" reason="login">0</license_count>
<license_count license_type="support_full" reason="extended_contact">0</license_count>
<license_count license_type="support_full">0</license_count>
</license_time_interval>
<license_time_interval timestamp="1643680800" datetime="2022-02-01T02:00:00 00:00">
<license_count license_type="support_full" reason="login">0</license_count>
<license_count license_type="support_full" reason="extended_contact">0</license_count>
<license_count license_type="support_full">0</license_count>
</license_time_interval>
<license_time_interval timestamp="1643684400" datetime="2022-02-01T03:00:00 00:00">
<license_count license_type="support_full" reason="login">0</license_count>
<license_count license_type="support_full" reason="extended_contact">0</license_count>
<license_count license_type="support_full">0</license_count>
</license_time_interval>
</license_time_intervals>
</license_usage>
我想用 Powershell 將它轉換為如下所示的 csv:
license_count/0/_license_type,license_count/0/_reason,license_count/0/__text,license_count/1/_license_type,license_count/1/_reason,license_count/1/__text,license_count/2/_license_type,license_count/2/__text,_timestamp,_datetime
support_full,login,0,support_full,extended_contact,0,support_full,0,1643670000,2022-01-31T23:00:00 00:00
support_full,login,2,support_full,extended_contact,0,support_full,2,1643673600,2022-02-01T00:00:00 00:00
support_full,login,0,support_full,extended_contact,0,support_full,0,1643677200,2022-02-01T01:00:00 00:00
support_full,login,0,support_full,extended_contact,0,support_full,0,1643680800,2022-02-01T02:00:00 00:00
support_full,login,0,support_full,extended_contact,0,support_full,0,1643684400,2022-02-01T03:00:00 00:00
support_full,login,0,support_full,extended_contact,0,support_full,0,1643688000,2022-02-01T04:00:00 00:00
support_full,login,3,support_full,extended_contact,0,support_full,3,1643691600,2022-02-01T05:00:00 00:00
and so on
所以我呼叫 xmlFile:
$xmlFile = Get-Content "C:\temp\example.xml"
怎么繼續?
你能幫幫我嗎?
太感謝了!!!
uj5u.com熱心網友回復:
以下是對資料的不同解釋:
# return XmlDocument type from xml content
$xml = [xml](Get-Content "C:\temp\example.xml")
# drill down to the license time intervals
$xml.license_usage.license_time_intervals.license_time_interval | Foreach-Object {
# current license time interval object
$interval = $_
# iterate license_count nodes
# use calculated properties to mix higher level properties with nested properties
# license count comes from the node text
$_.license_count | Select @{n='timestamp';e={$interval.timestamp}},
@{n='datetime';e={$interval.datetime}},
license_type,reason,
@{n='license_count';e={$_.'#text'}}
} | Export-Csv output.csv -NoType
輸出 CSV 將包含 headers timestamp,datetime,license_type,reason,license_count。請注意,這將導致多行包含相同的timestamp和datetime值,因為它們具有多個關聯license_count節點。就個人而言,這對我來說更容易在 PowerShell 和 CSV 中閱讀和排序。license_count使用屬性擴展可能需要代碼更加動態,因為您可能并不總是知道會有多少節點。只要架構保持不變,無論節點數量如何,此代碼都應該作業。
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/434198.html
