cougar77
Goto Top

Powershell und XML

Hallo,

ich habe mal wieder ein kleines Problem...

Ich bin grade dabei ein paar .XML-Dateien für unser System umzustricken.
Mit Dateinamen und Inhalt funktioniert das auch schon ganz gut und wie ich will.

Jetzt möchte ich aber eine "processing instruction", genauer gesagt den Tag <?XML-sylesheet ...>, entfernen.
Behandle ich die Datei wie eine .txt und lösche die Zeile einfach so raus, wird der Rest nicht mehr als .XML erkannt und IE zeigt mir eine leere Seite. (Mache ich das manuell bekomme ich die Anzeige, wie ich sie will - Struktur der XML).

Wie kann ich das bewerkstelligen, dass es passt?

Content-ID: 306781

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

Ausgedruckt am: 22.11.2024 um 06:11 Uhr

colinardo
Lösung colinardo 10.06.2016 aktualisiert um 13:23:59 Uhr
Goto Top
Hallo Cougar77,
hier ein Beispiel

Beispiel XML-Datei:
<?xml version="1.0" encoding="utf-8"?> 
<?xml-stylesheet href="default.css" title="Default style"?> 
<images>
  <image>
    <startdate>20160517</startdate>
    <fullstartdate>201605170000</fullstartdate>
    <enddate>20160518</enddate>
  </image>
</images>
Code zum entfernen der entsprechenden Processing-Instruction (stylesheet)
$xmlfile = 'C:\demo.xml'  
# XML Datei laden
$xml = new-object XML ; $xml.Load($xmlfile)
# Knoten der Processing Instruction per XPath selektieren
$pi = $xml.SelectSingleNode("/processing-instruction('xml-stylesheet')")  
# Instruction entfernen wenn sie gefunden wurde
if ($pi){$xml.RemoveChild($pi)}
# XMl-File wieder speichern
$xml.Save($xmlfile)

ACHTUNG: Wenn deine XMLs Namespaces verwenden muss der Code gänzlich umgestrickt werden und die Namespaces per Namespacemanager bekannt gemacht werden!

Behandle ich die Datei wie eine .txt und lösche die Zeile einfach so raus, wird der Rest nicht mehr als .XML erkannt und IE zeigt mir eine leere Seite.
Ich vermute du hast das File dann nicht im selben Encoding gespeichert wie es in der XML in der Declaration angegeben wurde, oder unwissend mehr entfernt als erlaubt.

Grüße Uwe
Cougar77
Cougar77 10.06.2016 um 14:18:32 Uhr
Goto Top
Danke!
Das funktioniert super!
So ähnlich hatte ich das schon versucht - nur habe ich nirgends gefunden, wie ich die PI per selectSingleNode ausgewählt kriege...
Danke!