XML mit Powershell bearbeiten
Hallo Zusammen,
ich habe aktuell ein paar XML-Dateien zu bearbeiten, die beim Datentransfer auf Fehler gegangen sind. Allerdings sind meine Powershell Kenntnisse auf Einsteigerniveau
Die Frage geht an die IT-Kollegen, die Erfahrung mit XML-Bearbeitung unter Powershell haben.
Anbei eine XML-Beispieldatei:
Im letzten Block mit dem Attribut DN="derzeit keine weitere Therapie/Diagnostik" soll der Wert des nachfolgenden Attributes von V="Nein" auf V="Ja" umgestellt werden:
XPath: /levelone/body/section/paragraph/content/local_markup/sciphox:sciphox-ssu/sciphox:Beobachtungen/sciphox:Beobachtung/sciphox:Ergebnistext/@V
Anbei das PS-Codefragment, was leider noch nicht funktioniert:
Könnt Ihr mir helfen? Würde mich sehr freuen ***
ich habe aktuell ein paar XML-Dateien zu bearbeiten, die beim Datentransfer auf Fehler gegangen sind. Allerdings sind meine Powershell Kenntnisse auf Einsteigerniveau
Die Frage geht an die IT-Kollegen, die Erfahrung mit XML-Bearbeitung unter Powershell haben.
Anbei eine XML-Beispieldatei:
<?xml version="1.0" encoding="iso-8859-15"?>
<levelone xmlns="urn::hl7-org/cda" xmlns:sciphox="urn::sciphox-org/sciphox">
<clinical_document_header />
<body>
<section>
<paragraph>
<caption>
<caption_cd DN="ohne Name" />
</caption>
<content>
<local_markup ignore="all" descriptor="sciphox">
<sciphox:sciphox-ssu type="observation" country="de" version="v1">
<sciphox:Beobachtungen>
<sciphox:Beobachtung>
<sciphox:Parameter DN="Alter" />
<sciphox:Ergebniswert V="49" U="Jahre" />
</sciphox:Beobachtung>
</sciphox:Beobachtungen>
</sciphox:sciphox-ssu>
</local_markup>
</content>
</paragraph>
<paragraph>
<caption>
<caption_cd DN="Überweisung im Rahmen des Hautkrebs-Screenings" />
</caption>
<content>
<local_markup ignore="all" descriptor="sciphox">
<sciphox:sciphox-ssu type="observation" country="de" version="v1">
<sciphox:Beobachtungen>
<sciphox:Beobachtung>
<sciphox:Parameter DN="Patient kommt auf Überweisung im Rahmen des Hautkrebs-Screenings" />
<sciphox:Ergebnistext V="Nein" />
</sciphox:Beobachtung>
<sciphox:Beobachtung>
<sciphox:Parameter DN="Überweisender Arzt hat HKS durchgeführt" />
<sciphox:Ergebnistext V="Nein" />
</sciphox:Beobachtung>
</sciphox:Beobachtungen>
</sciphox:sciphox-ssu>
</local_markup>
</content>
</paragraph>
<paragraph>
<caption>
<caption_cd DN="Angabe der Verdachtsdiagnose des überweisenden Arztes" />
</caption>
<content>
<local_markup ignore="all" descriptor="sciphox">
<sciphox:sciphox-ssu type="observation" country="de" version="v1">
<sciphox:Beobachtungen>
<sciphox:Beobachtung>
<sciphox:Parameter DN="Angabe über die Verdachtsdiagnose liegt vor" />
<sciphox:Ergebnistext V="Nein" />
</sciphox:Beobachtung>
</sciphox:Beobachtungen>
</sciphox:sciphox-ssu>
</local_markup>
</content>
</paragraph>
<paragraph>
<caption>
<caption_cd DN="Verdachtsdiagnose des Dermatologen" />
</caption>
<content>
<local_markup ignore="all" descriptor="sciphox">
<sciphox:sciphox-ssu type="observation" country="de" version="v1">
<sciphox:Beobachtungen>
<sciphox:Beobachtung>
<sciphox:Parameter DN="Verdachtsdiagnose" />
<sciphox:Ergebnistext V="Nein" />
</sciphox:Beobachtung>
</sciphox:Beobachtungen>
</sciphox:sciphox-ssu>
</local_markup>
</content>
</paragraph>
<paragraph>
<caption>
<caption_cd DN="Biopsie/Exzision" />
</caption>
<content>
<local_markup ignore="all" descriptor="sciphox">
<sciphox:sciphox-ssu type="observation" country="de" version="v1">
<sciphox:Beobachtungen>
<sciphox:Beobachtung>
<sciphox:Parameter DN="Biopsie zu Verdachtsdiagnose entnommen oder Exzision durchgeführt" />
<sciphox:Ergebnistext V="Nein" />
</sciphox:Beobachtung>
<sciphox:Beobachtung>
<sciphox:Parameter DN="anderweitige Therapie oder Diagnostik vorgenommen bzw. eingeleitet" />
<sciphox:Ergebnistext V="Nein" />
</sciphox:Beobachtung>
<sciphox:Beobachtung>
<sciphox:Parameter DN="derzeit keine weitere Therapie/Diagnostik" />
<sciphox:Ergebnistext V="Nein" />
</sciphox:Beobachtung>
</sciphox:Beobachtungen>
</sciphox:sciphox-ssu>
</local_markup>
</content>
</paragraph>
</section>
</body>
</levelone>
Im letzten Block mit dem Attribut DN="derzeit keine weitere Therapie/Diagnostik" soll der Wert des nachfolgenden Attributes von V="Nein" auf V="Ja" umgestellt werden:
XPath: /levelone/body/section/paragraph/content/local_markup/sciphox:sciphox-ssu/sciphox:Beobachtungen/sciphox:Beobachtung/sciphox:Ergebnistext/@V
Anbei das PS-Codefragment, was leider noch nicht funktioniert:
gci 'c:\tmp\*.HKSD' -File | %{
$xml = New-Object XML
$xml.XmlResolver = $null
$xml.Load($_.Fullname)
$ns = New-Object -TypeName "Xml.XmlNamespaceManager" -ArgumentList $xml.NameTable
$ns.AddNamespace("sciphox", $xml.DocumentElement.NamespaceURI)
$node = $xml.SelectSingleNode("//sciphox:Beobachtungen/sciphox:Beobachtung/sciphox:Parameter[@DN='derzeit keine weitere Therapie/Diagnostik']/../sciphox:Ergebnistext[@V]", $ns)
$xml.SelectSingleNode("//sciphox:Beobachtungen/sciphox:Beobachtung/sciphox:Parameter[@DN='derzeit keine weitere Therapie/Diagnostik']/sciphox:Ergebnistext", $ns).V = 'Ja'
Write-Output $xml.SelectSingleNode("//sciphox:Beobachtungen/sciphox:Beobachtung/sciphox:Parameter[@DN='derzeit keine weitere Therapie/Diagnostik']/sciphox:Ergebnistext[@V]", $ns)
$xml.Save($_.Fullname)
}
Könnt Ihr mir helfen? Würde mich sehr freuen ***
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 450418
Url: https://administrator.de/contentid/450418
Ausgedruckt am: 23.11.2024 um 02:11 Uhr
5 Kommentare
Neuester Kommentar
Servus @RustiXX, willkommen auf Administrator.de!
Da hast du wohl per Copy n' Paste Code übernommen der hier nicht passt. Der Grund: Du hast mit Zeile 6 des Codes den Default-Namespace anstatt den sciphox-Prefix in den Namespace-Manager übernommen, da kann sich der XPath Select natürlich dumm und dämlich suchen, er würde nie was finden .
Schönes Wochenende.
Grüße Uwe
Da hast du wohl per Copy n' Paste Code übernommen der hier nicht passt. Der Grund: Du hast mit Zeile 6 des Codes den Default-Namespace anstatt den sciphox-Prefix in den Namespace-Manager übernommen, da kann sich der XPath Select natürlich dumm und dämlich suchen, er würde nie was finden .
gci 'C:\temp\*.HKSD' -File | %{
$xml = New-Object XML
$xml.XmlResolver = $null
$xml.Load($_.Fullname)
$ns = New-Object System.Xml.XmlNamespaceManager $xml.NameTable
$ns.AddNamespace("sciphox", $xml.DocumentElement.GetNamespaceOfPrefix('sciphox'))
$node = $xml.SelectNodes("//sciphox:Beobachtung[sciphox:Parameter[@DN='derzeit keine weitere Therapie/Diagnostik']]/sciphox:Ergebnistext[@V='Nein']", $ns) | select -Last 1
if ($node){
$node.V = 'Ja'
$xml.Save($_.Fullname)
}
}
Grüße Uwe
Hallo,
49 Jahre alter Er oder Sie
Hautkrebs-screening
Gruß,
Peter
Zitat von @RustiXX:
ich habe aktuell ein paar XML-Dateien zu bearbeiten, die beim Datentransfer auf Fehler gegangen sind.
Wie ist der Datentransfer denn umgesetzt das dort einfach Fehler passieren und Daten sich selbstständig ändern können. Kommt also dann ein 69 Jähriger an, wird eingeliefert und eine 19 Jährige wird entlassen? Du änderst einfach Werte. Was sind die Folgen und was sagt die DSGVO. Und jetzt hat eine PTA/MTA Zweimal da anscheinend gleiche Behandlunsblatt in ihren Händen, einmal mit Ja und einmal mit Nein - was dann? Nur Gedanken wegen Datenmanipulation.ich habe aktuell ein paar XML-Dateien zu bearbeiten, die beim Datentransfer auf Fehler gegangen sind.
49 Jahre alter Er oder Sie
Hautkrebs-screening
Gruß,
Peter