gpt4 book ai didi

xml - 实现PowerShell XML to CSV解决方案的问题

转载 作者:行者123 更新时间:2023-12-02 23:53:14 25 4
gpt4 key购买 nike

我找到了一种使用PowerShell将XML转换为CSV的解决方案,我相信in this question可以满足我的需求。

解决方案示例代码如下所示:

$xml = [xml](Get-Content .\test.xml)

$xml.root.item | Select-Object @(
@{l="short_version";e={$_.short_version."#text"}},
@{l="long_name";e={$_.long_name."#text"}},
@{l="api_name";e={$_.api_name."#text"}},
@{l="long_version";e={$_.long_version."#text"}},
@{l="latest_stable_version";e={$_.latest_stable_version."#text"}},
@{l="automation_backend";e={$_.automation_backend."#text"}},
@{l="os";e={$_.os."#text"}}) |
Export-Csv test.csv -NoTypeInformation

但是,在对源XML进行适当的替换之后,我只生成了带有一行标题的CSV,后面是一行逗号,没有值。

我的源XML如下所示:
<Report>
<Columns>
<Col_Name>TimeStamp</Col_Name>
<Col_Name>MessageText</Col_Name>
<Col_Name>EventNotificationId</Col_Name>
<Col_Name>OperatorText</Col_Name>
<Col_Name>TimeOfAck</Col_Name>
<Col_Name>InitDeviceId</Col_Name>
</Columns>
<Record>
<TimeStamp><![CDATA[10/1/2018 1:34:06.99 PM]]></TimeStamp>
<MessageText><![CDATA[OnLine]]></MessageText>
<EventNotificationId><![CDATA[Path\Text]]></EventNotificationId>
<OperatorText><![CDATA[]]></OperatorText>
<TimeOfAck><![CDATA[1/1/1989]]></TimeOfAck>
<InitDeviceId><![CDATA[Path\Text]]></InitDeviceId>
</Record>
<Record>
~
</Record>

(出于谨慎考虑,我在几个地方都替换了Path \ Text。)

我的替换试验代码如下所示:
$xml = [xml](Get-Content C:\Test\test.xml)

$xml.Report.Record | Select-Object @(
@{l="TimeStamp";e={$_.TimeStamp."#text"}},
@{l="MessageText";e={$_.MessageText."#text"}},
@{l="EventNotificationId";e={$_.EventNotificationId."#text"}},
@{l="OperatorText";e={$_.OperatorText."#text"}},
@{l="TimeOfAck";e={$_.TimeOfAck."#text"}},
@{l="InitDeviceId";e={$_.InitDeviceId."#text"}}) |
Export-Csv C:\Test\test.csv -NoTypeInformation -Force

为了使该解决方案对我有效,我需要更改什么?

我现在最后想到的是,使用我当前的代码可能无法读取专有数据类型CDATA。如果那负责,我不确定如何从中解析纯文本字符串。同样是FWIW,我可以选择以HTML文档的形式获取源数据,但是从我的快速研究中看来,将源XML文件中的CSV转换脚本编写为脚本似乎更容易。

谢谢。

最佳答案

xml解析器会将您的CDATA节放在一个名为#cdata-section而不是#text的成员中。因此,您的解决方法很简单:

$xml.Report.Record | Select-Object @(
@{l="TimeStamp";e={$_.TimeStamp."#cdata-section"}},
@{l="MessageText";e={$_.MessageText."#cdata-section"}},
@{l="EventNotificationId";e={$_.EventNotificationId."#cdata-section"}},
@{l="OperatorText";e={$_.OperatorText."#cdata-section"}},
@{l="TimeOfAck";e={$_.TimeOfAck."#cdata-section"}},
@{l="InitDeviceId";e={$_.InitDeviceId."#cdata-section"}}) |
Export-Csv C:\Test\test.csv -NoTypeInformation -Force

关于xml - 实现PowerShell XML to CSV解决方案的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53088043/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com