我收到了很长的xml文件,其中包含了很多行,以至于我的编辑器无法在不崩溃的情况下打开它们。我需要能够过滤xml文件,以便保留某些标记并将其写入另一个文件。换句话说,99%的内容需要删除,结果需要保存在其他地方。
父元素称为:
<TransferSatz_Wartung>需要保留的子元素是:
<Anlage_Allgemein>
<Anlage_Erlaubnis>
<Wartung_Probenahme>
<Wartung_Allgemein>..so脚本运行后,我希望看到以下输出:
<TransferSatz_Wartung>
<Anlage_Allgemein>
<child node1></child node>
<child node2></child node>
<child node3></child node>
</Anlage_Allgemein>
<Anlage_Erlaubnis>
<child node1></child node>
<child node2></child node>
<child node3></child node>
</Anlage_Erlaubnis>
<Wartung_Probenahme>
<child node1></child node>
<child node2></child node>
<child node3></child node>
</Wartung_Probenahme>
<Wartung_Allgemein>
<child node1></child node>
<child node2></child node>
<child node3></child node>
</Wartung_Allgemein>
<TransferSatz_Wartung>下面的示例代码并不包括所有的子标记,但是显示父节点名为TransferListe,而我要提取的子节点都在其子节点中。我想要保留的第一个子节点名为Anlage_Allgemein,可以在第4行看到。这个标记中的所有节点都应该保留。
<TransferListe>
<TransferSatz_Wartung>
<Version>4.06</Version>
<Anlage_Allgemein>
<IstAktiv>1</IstAktiv>
<AnlagenNr>415</AnlagenNr>
<VerfahrenBRAnzBehaelter>1</VerfahrenBRAnzBehaelter>
<Strasse>Höremer Weg</Strasse>
<HausNr>1</HausNr>
<Laenderkennung>D-</Laenderkennung>
<PLZ>29690</PLZ>
<Ort>Hörem</Ort>
<Ortsteil/>
<Ansprechpartner/>
<TelefonNr/>
<Gemarkung/>
<Flur/>
<Flurstueck/>
<Rechtswert>0000000</Rechtswert>
<Hochwert>0000000</Hochwert>
<DatumWartungsvertrag>17.06.1996</DatumWartungsvertrag>
<AnlageAusgelegtEW>6</AnlageAusgelegtEW>
<GesamtgroesseVK>0.0</GesamtgroesseVK>
<DatumNaechsteWartung>07.06.2016</DatumNaechsteWartung>
<Breitengrad>00° 00' 00,0''</Breitengrad>
<Laengengrad>00° 00' 00,0''</Laengengrad>
</Anlage_Allgemein>
<Anlage_Erlaubnis>
<DefBundeslaenderID>9</DefBundeslaenderID>
<DefUWBID>31</DefUWBID>
<AZ_UWB>66.601/66-32-159-042</AZ_UWB>
<ErlaubnisNr>159-042</ErlaubnisNr>
<DatumEinlErlaubnis>01.01.2001</DatumEinlErlaubnis>
<ErlBefristungErlaubnis>01.01.2001</ErlBefristungErlaubnis>
<ErlDatumGenehmigung>01.01.2001</ErlDatumGenehmigung>
<ErlBefristungGenehmigung>01.01.2001</ErlBefristungGenehmigung>
<ErlDatumInbetriebnahme>01.01.2001</ErlDatumInbetriebnahme>
<ErlDatumAbnahme>01.01.2000</ErlDatumAbnahme>
<Wartungshaeufigkeit>1</Wartungshaeufigkeit>
<Eigenwartung>0</Eigenwartung>
<Wartungsvertrag>1</Wartungsvertrag>
<ErlGefordReinigungsklasse>0</ErlGefordReinigungsklasse>
<ErlZusReinigungsklasse>0</ErlZusReinigungsklasse>
</Anlage_Erlaubnis>发布于 2015-08-05 12:08:29
查看这个PowerShell脚本是否能满足您的需要。用.ps1扩展保存它。
[xml]$xml = gc XMLfile.xml
$keep = @(
'Anlage_Allgemein',
'Anlage_Erlaubnis',
'Wartung_Probenahme',
'Wartung_Allgemein'
)
$XPath = "//TransferSatz_Wartung/*[not(self::" + ($keep -join " or self::") + ")]"
$xml.SelectNodes($XPath) | %{
$_.parentNode.removeChild($_)
}
$xml.save("output.xml")在cmd提示符或批处理脚本中,使用以下语法运行它:
powershell ".\scriptname.ps1"https://stackoverflow.com/questions/31828685
复制相似问题