특성이 많이 있고 이름이 같은 여러 요소가있는 일부 XML 데이터가 있는데이를 CSV 파일로 병합하고 싶습니다. 이다XML PowerShell의 부모 및 자식 특성 및 요소
<?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]$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"
}
}
}
그리고 나는 오류가 계속 발생합니다. ordinal location ($ hits [0] .field [4])으로 참조하여 다른 요소와 속성에 액세스 할 수 있지만 FIELD 값이 다른 순서로 표시 될 수있는 미래의 출력에 대해 보호하려고합니다.
누구나 내가 어떻게 이런 일을 할 수 있다고 제안 할 수 있습니까? select-XML을 사용해 보았을 때 더욱 귀찮은 일이 발견되었지만 좀 더 세련된 방법 일 수 있습니다.
고맙습니다! 누군가는 오프라인 제안 : '[XML] $ hitfile = GET-내용 fastxml.xml 'foreach는 ($ $의 hitfile.segments.segment.resultpage.resultset.hit에 명중) '{ '$ 행 = $ mjatable .NewRow() '$ row.Hit = $ hit.No '$ row.InternalID = $ hit.field | ? {$ _. 이름 -eq '내부 ID'} | foreach {$ _. 'text'} '$ row.URL = $ hit.field | ? {$ _. 이름 -eq 'url'} | foreach {$ _. 'text}} $ mjaTable.Rows.Add ($ row) '} '$ mjaTable | format-table -AutoSize – MJA
NAME attrib = ("url"또는 "Internalid")로 FIELD 요소를 참조하고 WHERE-OBJECT 필터를 사용하지 않고 '#text'값을 검색 할 수 있다면 여전히 궁금합니다. 이 두 가지 해결책은 작업을 완료합니다 – MJA
주석의 코드는 PITA이고 응답을 – user1578107