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-Key: 4265658061

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

Printed on: June 20, 2024 at 15:06 o'clock

Member: hempel
Solution hempel May 31, 2024 updated at 12:15:25 (UTC)
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ß
Member: hempel
Solution hempel May 31, 2024 updated at 14:55:43 (UTC)
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.
Member: it-frosch
it-frosch Jun 02, 2024 at 07:05:42 (UTC)
Goto Top
@hempel:

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