it-frosch
Goto Top

XML CDATA abfangen - geht das auch professioneller?

Hallo erfahrenere Powershell Skripter,

ich lese mit Powershell eine XML Datei aus, die im Feld Description ab und an CDATA enthält.
z.B.
<DESCRIPTION><![CDATA[good kind GmbH & Co. KG]]></DESCRIPTION>

Ich habe auch schon herausgefunden, dass ich dann das Feld mit:
$($element.DESCRIPTION.InnerText)
auslesen muss, um den Inhalt zu bekommen.
Lese ich ganz normal mit
$($element.DESCRIPTION)
aus, bekomme ich als Inhalt 'System.Xml.XmlElement' zurück.

Aktuell sieht meine Vorgehensweise so aus:
# InnerText verwenden wenn Description CDATA enthält
    if ($element.DESCRIPTION -match 'XML') {  
        $variable.NAME = "$($element.DESCRIPTION.InnerText)"  
    }
    else {
        $variable.NAME = "$($element.DESCRIPTION)"  
    }

Allerdings frage ich mich, ob das nicht zu händsärmlig ist und ich demnächst wieder nacharbeiten darf.

Deshalb die Frage an alle die es schon besser wissen, wie macht man so etwas professioneller?

Nachtrag: Pareto reicht mir face-wink

Grüße vom it-frosch

Content-ID: 4265658061

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

Ausgedruckt am: 08.11.2024 um 07:11 Uhr

13034433319
Lösung 13034433319 31.05.2024 aktualisiert um 14:15:25 Uhr
Goto Top
Immer als XMLElement holen, z.B. dann hast du immer die Property InnerText (Achtung der XPath-Filter ist Case-Sensitive!)
[xml]$xml = @' 
<?xml version="1.0" encoding="utf-8"?> 
<root>
    <DESCRIPTION><![CDATA[good kind GmbH & Co. KG]]></DESCRIPTION>
    <DESCRIPTION2>Whatever</DESCRIPTION2>
</root> 
'@ 

$xml.SelectSingleNode('/root/DESCRIPTION').InnerText 
$xml.SelectSingleNode('/root/DESCRIPTION2').InnerText 

Gruß
13034433319
Lösung 13034433319 31.05.2024 aktualisiert um 16:55:43 Uhr
Goto Top
Nicht "professionell" genug 😂?

wenn du nur ein Feld aus der XML brauchst geht es kurz auch so
(Select-XML -Path <xmlfile> -XPath "/root/DESCRIPTION").Node.innerText

Achtung: Falls die XML Dateien Namespaces enthalten bitte beachten das diese bei Select-XML oder über einen Namespacemanager angegeben werden müssen damit der XPATH ein Knotenergebnis liefert.
it-frosch
it-frosch 02.06.2024 um 09:05:42 Uhr
Goto Top
@13034433319:

Danke dir für die Anregungen.

Ich teste mal ob ich über die if Bedingung prüfen kann ob InnerText leer ist oder nicht.
Das wäre dann ein Ansatz.

grüße vom it-frosch