pappkamerad
Goto Top

XML - Nodes eines kompletten Namespaces entfernen

Hallo,

ich benötige Hilfe bei folgenden Problem. Ich möchte aus einer XML alles Nodes eines bestimmten Namespaces komplett entfernen.

Entfernt werden sollen alle Nodes, die mit "itunes" beginnen.

Leider komme ich mit den Anleitungen, die sich ergooglen lassen, nicht besonders weit.

<?xml version="1.0" encoding="UTF-8"?>  
<rss xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:itunes="http://www.itunes.com/dtds/podcast-1.0.dtd" version="2.0">  
<channel>
<title>Podcast</title>
<link>https://www.podcast.de/podcasts/podcast--100.html</link>
<itunes:summary>Podcasts.</itunes:summary>
<description>PodcastsHuhu.</description>
<lastBuildDate>Mon, 30 Jul 2018 21:26:44 +0200</lastBuildDate>
<language>de-de</language>
<image>
<url>http://www.podcasts.de/podcasts/podcast.jpg</url>
<title>Podcasts</title>
<link>https://www.podcasts.de/podcasts/podcast--100.html</link>
<width>144</width>
<height>144</height>
</image>
<itunes:image href="http://www.podcasts.de/podcasts/podcast.jpg" />  
<itunes:keywords>podcast, comedy, humor, lustig</itunes:keywords>
<itunes:subtitle>Podcasts.</itunes:subtitle>
<itunes:block>false</itunes:block>
<itunes:category text="Comedy" />  
<itunes:owner />
<itunes:explicit>no</itunes:explicit>
<item>
<title>Podcast01</title>
<pubDate>Mon, 30 Jul 2018 21:26:06 +0200</pubDate>
<description>Text...</description>
<link>https://www.podcasts.de/podcasts/podcast/audio-781110.html</link>
<dc:creator>ICH</dc:creator>
<enclosure url="https://podcasts.de/podcasts/podcast01.mp3" length="2221750" type="audio/mpeg" />  
<itunes:explicit>no</itunes:explicit>
<itunes:subtitle>Podcast01...</itunes:subtitle>
<itunes:summary>Podcast01...</itunes:summary>
<itunes:duration>00:01:09</itunes:duration>
<itunes:keywords>Podcast, Comedy</itunes:keywords>
<guid isPermaLink="false">e9af2673-c452-499e-935b-5027af526a30</guid>  
</item>
<item>
<title>Podcast02</title>
<pubDate>Wed, 03 Jan 2018 22:51:58 +0100</pubDate>
<description>Podcast02:
1. Aufhören, Listen für alles anzulegen
B. Konsequenter werden
7. Zählen lernen...</description>
<link>https://podcasts.de/podcasts/podcast/audio-589276.html</link>
<dc:creator>ICH</dc:creator>
<enclosure url="https://podcasts.de/podcasts/podcast02.mp3" length="2965415" type="audio/mpeg" />  
<itunes:explicit>no</itunes:explicit>
<itunes:subtitle>Podcast02:
1. Aufhören, Listen für alles anzulegen
B. Konsequenter werden
7. Zählen lernen...</itunes:subtitle>
<itunes:summary>Podcast02:
1. Aufhören, Listen für alles anzulegen
B. Konsequenter werden
7. Zählen lernen...</itunes:summary>
<itunes:duration>00:01:32</itunes:duration>
<itunes:keywords>Podcast, Comedy</itunes:keywords>
<guid isPermaLink="false">3641f206-a9a7-408b-aea5-4f17d5b7280e</guid>  
</item>
</channel>
</rss>

Ich wollte es mit einem Batch-Schnipsel entfernen, allerdings fällt die Batch bei den Node mit Zeilenumbruch auf die Nase, weil sie nur ganze Zeilen löscht, die mit "<itunes" beginnen und somit der Rest ind den folgenden Zeilen stehen bleibt.

Ich hoffe, Ihr könnt mir helfen.

Grüße
pappkamerad

Content-Key: 381967

Url: https://administrator.de/contentid/381967

Printed on: April 16, 2024 at 23:04 o'clock

Member: erikro
erikro Aug 01, 2018 at 11:47:36 (UTC)
Goto Top
Member: colinardo
Solution colinardo Aug 01, 2018 updated at 17:01:23 (UTC)
Goto Top
Für so ne einfache Aufgabe würde ich zwar direkt XSLT für benutzen aber wenn's ein Skript sein soll... als Powershell:
$xmlfile = 'D:\demo.xml'  
$xml = New-Object XML
$xml.Load($xmlfile)
$xml.SelectNodes('/rss/channel//*') | ?{$_.NamespaceURI -eq 'http://www.itunes.com/dtds/podcast-1.0.dtd'} | %{$_.ParentNode.RemoveChild($_) | out-null}  
$xml.DocumentElement.RemoveAttribute('xmlns:itunes')  
$xml.Save('D:\demo_new.xml')  
Grüße Uwe
Member: pappkamerad
pappkamerad Aug 01, 2018 at 12:33:30 (UTC)
Goto Top
Man ich hab jetzt 2 Tage vor dem Problem gestanden und dann ist die Lösung doch wieder so simpel. Vielen Dank Uwe!

@eriko: Das hatte ich auch gefunden, es ist mir aber nicht gelungen auf meinen Fall anzuwenden.

Grüße
pappkamerad
Member: erikro
erikro Aug 01, 2018 at 13:13:56 (UTC)
Goto Top
Moin,


Zitat von @pappkamerad:

Man ich hab jetzt 2 Tage vor dem Problem gestanden und dann ist die Lösung doch wieder so simpel. Vielen Dank Uwe!

@eriko: Das hatte ich auch gefunden, es ist mir aber nicht gelungen auf meinen Fall anzuwenden.


Das ist doch nahezu der gleiche Code wie der von Uwe. face-wink

Liebe Grüße

Erik
Member: colinardo
colinardo Aug 01, 2018 updated at 13:36:10 (UTC)
Goto Top
Nicht wirklich. Wenn er wüsste wie man XPath rekursiv auf alle Knoten anwendet und den Namespaces prüft wäre er ja nicht hier gewesen face-wink.
Member: pappkamerad
pappkamerad Aug 01, 2018 at 13:28:23 (UTC)
Goto Top
Du sagst es, nahezu.
Ich habe leider nicht das Wissen, den Code aus Deinem Beispiel so anzupassen, dass es auch bei einem Namespace-XML funktioniert.
Den Code für einfaches XML hab ich auch zu hauf gefunden.

Grüße
pappkamerad