我有一些 XML 数据,其中有很多属性和多个同名元素,我想将其展平为 CSV 文件。数据 XML 如下所示:
<?xml version="1.0" encoding="utf-8"?>
<SEGMENTS>
<SEGMENT NAME="webcluster">
<RESULTPAGE>
<RESULTSET FIRSTHIT="1" LASTHIT="100" HITS="100" TOTALHITS="100">
<HIT NO="1" RANK="19000" SITEID="0" MOREHITS="100">
<FIELD NAME="rank">19000</FIELD>
<FIELD NAME="id">1</FIELD>
<FIELD NAME="url">C:\website.com\folder1\file1.txt</FIELD>
<FIELD NAME="filename">file1.txt</FIELD>
<FIELD NAME="path">https://website.com/folder1/</FIELD>
</HIT>
<HIT NO="2" RANK="19000" SITEID="0" MOREHITS="100">
<FIELD NAME="rank">19000</FIELD>
<FIELD NAME="id">2</FIELD>
<FIELD NAME="url">C:\website.com\folder1\file2.txt</FIELD>
<FIELD NAME="filename">file2.txt</FIELD>
<FIELD NAME="path">https://website.com/folder1/</FIELD>
</HIT>
<HIT NO="3" RANK="18999" SITEID="0" MOREHITS="100">
<FIELD NAME="rank">18999</FIELD>
<FIELD NAME="id">3</FIELD>
<FIELD NAME="url">C:\website.com\folder5\file3.txt</FIELD>
<FIELD NAME="filename">file3.txt</FIELD>
<FIELD NAME="path">C:\website.com\folder\</FIELD>
</HIT>
</RESULTSET>
</RESULTPAGE>
</SEGMENT>
</SEGMENTS>
我正在尝试迭代它以产生类似的东西
HIT filename path ----- ---------- ------ 1 file1.txt C:\website.com\folder1\ 2 file2.txt C:\website.com\folder1\ 3 file3.txt C:\website.com\folder5\
我的代码是:
[xml]$xml=Get-Content .\xmlfile.xml
$hits = $xml.segments.segment.resultpage.resultset.hit
foreach($hit in $hits)
{
foreach($field in $hit.field)
{
if (field."NAME" -eq 'url')
{
write-output $hit.no $field."#VALUE"
}
}
}
而且我不断收到错误。我可以通过按序号位置 ($hits[0].field[4]) 引用它们来访问不同的元素和属性,但我想防止将来输出 FIELD 值的顺序可能不同。
谁能建议我如何完成这项工作?我尝试使用 select-XML 并发现它更麻烦,但也许这是更优雅的方法。