rustixx
Goto Top

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 face-wink
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 *** face-smile

Content-ID: 450418

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

Ausgedruckt am: 23.11.2024 um 02:11 Uhr

colinardo
Lösung colinardo 11.05.2019 aktualisiert um 15:46:58 Uhr
Goto Top
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 face-wink.
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)
    }
}
Schönes Wochenende.
Grüße Uwe
Pjordorf
Pjordorf 11.05.2019 um 16:36:16 Uhr
Goto Top
Hallo,

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.
49 Jahre alter Er oder Sie
Hautkrebs-screening

Gruß,
Peter
colinardo
Lösung colinardo 11.05.2019 aktualisiert um 16:49:34 Uhr
Goto Top
Da kann man nur hoffen das die Quell-Daten vom entsprechenden Nutzer nur signiert verwendet werden face-wink.
RustiXX
RustiXX 12.05.2019 um 08:57:35 Uhr
Goto Top
Die Daten werden gezippt und natürlich vor dem Versand mit dem private Key verschlüsselt (XKM). Die "Datenmanipulation" wird ansonsten durch das Quellprogramm erledigt. Nur eben nicht in diesem Fall, weil der Servicepack zu spät geliefert wurde und der Transfer schon bei der KV war.
RustiXX
RustiXX 12.05.2019 um 08:59:24 Uhr
Goto Top
Hallo Uwe,
Du bist der Hammer!
Großen Dank!
Gruß,
R.