Wie man XML in JSON in PowerShell konvertiert

  1. Verwendung von XPath Selection, Hash Table und ConvertTo-Json, um XML in JSON in PowerShell umzuwandeln
  2. Verwendung der Cmdlets ConvertTo-Json und ConvertFrom-Xml, um XML in JSON in PowerShell umzuwandeln
  3. Fazit
Wie man XML in JSON in PowerShell konvertiert

Dieser umfassende Leitfaden behandelt die Umwandlung von XML-Dokumenten in JSON-formatierte Strings unter Verwendung von PowerShell, einer leistungsstarken Scriptsprache und Befehlszeilenshell. Die Formate XML und JSON sind grundlegend für den Datenaustausch und die Speicherung, insbesondere in Umgebungen, in denen Konfiguration und Datenverarbeitung von entscheidender Bedeutung sind.

PowerShell vereinfacht mit seinem robusten Satz von Cmdlets diesen Umwandlungsprozess. Wir erkunden in diesem Leitfaden zwei wichtige Methoden: Die erste besteht aus einer Kombination von XPath Selection, Hash Table und ConvertTo-Json, und die zweite nutzt die Cmdlets ConvertTo-Json und ConvertFrom-Xml.

Der Leitfaden bietet einen schrittweisen Ansatz, der mit dem Zugreifen auf XML-Dokumentenschlüssel und -werte beginnt, gefolgt vom Erstellen eines PowerShell-Hashs zur Speicherung der Daten und schließlich der Umwandlung des Hashs in JSON. Jede Methode wird mit detaillierten Beispielen und Syntax veranschaulicht, um ein klares Verständnis des involvierten Prozesses sicherzustellen.

Verwendung von XPath Selection, Hash Table und ConvertTo-Json, um XML in JSON in PowerShell umzuwandeln

XML-Dokumentenschlüssel und -werte zugreifen

PowerShell ermöglicht die Manipulation von XML-Dokumentknoten mithilfe des Cmdlets Select-Xml. Wir können XPath-Ausdrücke angeben, um Knoten und deren Textwerte in einem XML-Dokument zu finden.

Syntax:

Select-Xml
[-XPath] <string>
[-Path] <string[]>
[-Namespace <hashtable>]
[<CommonParameters>]

Lass uns ein XML-Dokument mit dem Namen employeeinfo.xml mit folgendem Inhalt erstellen.

XML - employeeinfo.xml:

<?xml version="1.0" encoding="utf-8"?>
<Employees>
    <Employee>
        <EmpId>1</EmpId>
        <EmpAge>45</EmpAge>
        <EmpDesignation>SSE</EmpDesignation>
    </Employee>
    <Employee>
        <EmpId>2</EmpId>
        <EmpAge>34</EmpAge>
        <EmpDesignation>Junior SE</EmpDesignation>
    </Employee>
</Employees>

Jetzt werden wir auf jeden XML-Knoten EmpId, EmpAge und EmpDesignation mithilfe des Cmdlets Select-Xml wie folgt zugreifen.

Code:

$empIds = Select-Xml -Path "D:\codes\employeeinfo.xml" -XPath "//Employee//EmpId" | foreach { $_.node.InnerText }
$empAges = Select-Xml -Path "D:\codes\employeeinfo.xml" -XPath "//Employee//EmpAge" | foreach { $_.node.InnerText }
$empDesigs = Select-Xml -Path "D:\codes\employeeinfo.xml" -XPath "//Employee//EmpDesignation" | foreach { $_.node.InnerText }

In diesem Beispiel ist der -Path der Ort, an dem sich die employeeinfo.xml befindet. Da wir drei Knoten pro Mitarbeiterobjekt abrufen müssen, wurde PowerShell foreach verwendet.

Der XPath-Ausdruck sieht für jeden Knoten wie folgt aus. Der EmpID-Knoten kann durch die XPath-Abfrage "//Employee//EmpId" erreicht werden.

Der EmpAge-Knoten kann durch die XPath-Abfrage "//Employee//EmpIAge" erreicht werden. Der EmpDesignation-Knoten kann durch die XPath-Abfrage "//Employee//EmpDesignation" erreicht werden.

Die Referenzvariablen $empIds, $empAges und $empDesigs enthalten ein Array von Werten für die jeweiligen XML-Knoten. Lassen Sie uns die Arrays in die PowerShell-Konsole ausgeben.

Schreiben Sie die Array-Werte für die jeweiligen XML-Knoten im PowerShell-Konsolefenster.

PowerShell-Hash zur Speicherung der Daten erstellen

Wir haben keinen direkten Ansatz zur Umwandlung eines XML-Dokuments in einen JSON-String. Daher müssen wir, wie im obigen Abschnitt gezeigt, die XML-Daten extrahieren und diese Daten als Zwischenformat in einen PowerShell-Hash schieben.

Lass uns den Hash erstellen.

$empObjHash1 = @{
    EmpId          = $empIds[0];
    EmpAge         = $empAges[0];
    EmpDesignation = $empDesigs[0];
}
$empObjHash2 = @{
    EmpId          = $empIds[1];
    EmpAge         = $empAges[1];
    EmpDesignation = $empDesigs[1];
}

$finalHash = @{}
$finalHash.Add("emp1", $empObjHash1)
$finalHash.Add("emp2", $empObjHash2)

Wir haben zur Veranschaulichung zwei Mitarbeiterobjekte aus dem XML extrahiert und diese Daten in zwei Hash-Objekte, $empObjHash1 und $empObjHash2, geschoben. Dann wird der $finalHash erstellt, indem die beiden Mitarbeiterobjekte geschoben werden.

Wenn wir den $finalHash ausgeben, würde er wie folgt aussehen.

Objekte aus XML in Hash-Objekte extrahieren

Wir können die foreach-Schleife verwenden, um den $finalHash näher zu untersuchen.

Code:

foreach ($em in $finalHash.keys) {
    foreach ($emp in $finalHash[$em]) {
        foreach ($val in $emp.keys) {
            Write-Host "Key:" $val "Value:" $emp[$val]
        }
    }
}

Ausgabe:

Verwenden Sie eine foreach-Schleife, um den $finalHash im Detail zu inspizieren.

Der $finalHash wurde mit den relevanten Daten aus dem XML erstellt.

Hash in JSON umwandeln

Da wir einen PowerShell-Hash $finalHash haben, ist es möglich, mit dem Cmdlet ConvertTo-Json einen JSON-String aus dem Hash zu erstellen.

Syntax:

ConvertTo-Json
[-InputObject] <Object>
[-Depth <Int32>]
[-Compress]
[-EnumsAsStrings]
[-AsArray]
[-EscapeHandling <StringEscapeHandling>]
[<CommonParameters>]

Lass uns den erstellten Hash $finalHash übergeben, um den JSON-String zu erstellen, wie im Folgenden gezeigt.

Code:

$finalHash | ConvertTo-Json

Ausgabe:

Hash in JSON umwandeln

PowerShell Vollscript:

$empIds = Select-Xml -Path "D:\codes\employeeinfo.xml" -XPath "//Employee//EmpId" | foreach { $_.node.InnerText }
$empAges = Select-Xml -Path "D:\codes\employeeinfo.xml" -XPath "//Employee//EmpAge" | foreach { $_.node.InnerText }
$empDesigs = Select-Xml -Path "D:\codes\employeeinfo.xml" -XPath "//Employee//EmpDesignation" | foreach { $_.node.InnerText }

$empObjHash1 = @{
    EmpId          = $empIds[0];
    EmpAge         = $empAges[0];
    EmpDesignation = $empDesigs[0];
}
$empObjHash2 = @{
    EmpId          = $empIds[1];
    EmpAge         = $empAges[1];
    EmpDesignation = $empDesigs[1];
}

$finalHash = @{}
$finalHash.Add("emp1", $empObjHash1)
$finalHash.Add("emp2", $empObjHash2)

foreach ($em in $finalHash.keys) {
    foreach ($emp in $finalHash[$em]) {

        foreach ($val in $emp.keys) {
            Write-Host "Key:" $val "Value:" $emp[$val]
        }
    }
}

$finalHash | ConvertTo-Json

Verwendung der Cmdlets ConvertTo-Json und ConvertFrom-Xml, um XML in JSON in PowerShell umzuwandeln

In PowerShell ist die Umwandlung von Daten von XML in JSON-Format eine häufige Anforderung, insbesondere bei der Schnittstelle mit Web-APIs oder modernen Webdiensten. PowerShell vereinfacht diese Aufgabe mit seinen Cmdlets ConvertTo-Json und ConvertFrom-Xml.

Syntax:

  • Get-Content: Liest Inhalte aus einer Datei.

    • -Path <String>: Gibt den Pfad der Datei an.
  • ConvertTo-Json: Wandelt ein Objekt in einen JSON-formatierten String um.

    • -InputObject <Object>: Gibt das zu konvertierende Objekt an.
    • -Depth <Int32>: Gibt die Tiefe der Objekt-Hierarchien an, die einbezogen werden sollen.

Beispiel

# Path to the XML file
$xmlFilePath = "employeeinfo.xml"

# Read the content of the XML file and convert to XML object
$xml = New-Object XML
$xml.Load($xmlFilePath)

# Parse the XML and create an object array
$employeeArray = @()
foreach ($employee in $xml.Employees.Employee) {
    $empObject = [PSCustomObject]@{
        EmpId          = $employee.EmpId
        EmpAge         = $employee.EmpAge
        EmpDesignation = $employee.EmpDesignation
    }
    $employeeArray += $empObject
}

# Convert the array to JSON
$json = $employeeArray | ConvertTo-Json

# Display the result
Write-Output $json

In unserem Skript geben wir zuerst den Pfad zur XML-Datei mit der Variablen $xmlFilePath an. Mithilfe von Get-Content lesen wir die Inhalte dieser Datei in die Variable $xmlContent.

Dieser Inhalt wird dann in einen [xml]-Typ geworfen, wodurch ein strukturiertes XML-Objekt ($xmlObject) erstellt wird. Dieses Objekt wird an ConvertTo-Json übergeben, um die Umwandlung in das JSON-Format durchzuführen.

Abschließend verwenden wir Write-Output, um den JSON-String auszugeben.

Ausgabe:

powershell konvertiere xml zu json - ausgabe

Fazit

Zusammenfassend hat dieser Leitfaden erfolgreich die praktischen und effizienten Methoden zur Umwandlung von XML-Dokumenten in JSON-Strings mithilfe von PowerShell demonstriert. Durch die Vorstellung von zwei unterschiedlichen Ansätzen - einer, der die Extraktion von XML-Daten in einen PowerShell-Hash beinhaltet, und einer anderen, die das Cmdlet ConvertFrom-Xml verwendet - bietet der Leitfaden vielseitige Optionen, die auf unterschiedliche Benutzerbedürfnisse und Szenarien abgestimmt sind.

Die schrittweisen Anweisungen, gekoppelt mit relevanten Codeausschnitten und Ausgaben, ermöglichen es den Lesern, das Konzept leicht zu verstehen und diese Methoden in realen Situationen anzuwenden. Die Flexibilität und Leistungsfähigkeit von PowerShell im Umgang mit und der Umwandlung von Datenformaten sind offensichtlich, was es zu einem unentbehrlichen Werkzeug für Administratoren und Entwickler macht, die sich mit der Transformation von XML und JSON-Daten befassen.

Genießen Sie unsere Tutorials? Abonnieren Sie DelftStack auf YouTube, um uns bei der Erstellung weiterer hochwertiger Videoanleitungen zu unterstützen. Abonnieren
Migel Hewage Nimesha avatar Migel Hewage Nimesha avatar

Nimesha is a Full-stack Software Engineer for more than five years, he loves technology, as technology has the power to solve our many problems within just a minute. He have been contributing to various projects over the last 5+ years and working with almost all the so-called 03 tiers(DB, M-Tier, and Client). Recently, he has started working with DevOps technologies such as Azure administration, Kubernetes, Terraform automation, and Bash scripting as well.

Verwandter Artikel - PowerShell Convert