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

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

Printed on: April 20, 2024 at 05:04 o'clock

Member: colinardo
Solution colinardo May 11, 2019 updated at 13:46:58 (UTC)
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
Member: Pjordorf
Pjordorf May 11, 2019 at 14:36:16 (UTC)
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
Member: colinardo
Solution colinardo May 11, 2019 updated at 14:49:34 (UTC)
Goto Top
Da kann man nur hoffen das die Quell-Daten vom entsprechenden Nutzer nur signiert verwendet werden face-wink.
Member: RustiXX
RustiXX May 12, 2019 at 06:57:35 (UTC)
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.
Member: RustiXX
RustiXX May 12, 2019 at 06:59:24 (UTC)
Goto Top
Hallo Uwe,
Du bist der Hammer!
Großen Dank!
Gruß,
R.