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-ID: 381967

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

Ausgedruckt am: 22.11.2024 um 11:11 Uhr

erikro
erikro 01.08.2018 um 13:47:36 Uhr
Goto Top
colinardo
Lösung colinardo 01.08.2018 aktualisiert um 19:01:23 Uhr
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
pappkamerad
pappkamerad 01.08.2018 um 14:33:30 Uhr
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
erikro
erikro 01.08.2018 um 15:13:56 Uhr
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
colinardo
colinardo 01.08.2018 aktualisiert um 15:36:10 Uhr
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.
pappkamerad
pappkamerad 01.08.2018 um 15:28:23 Uhr
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