Announcement

Collapse
No announcement yet.

XElement und Namespace

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • XElement und Namespace

    Guten Morgen,
    nachdem ihr mir bei diesem vertrackten XML schon über einige Hürden geholfen habt, tut sich jetzt die nächste auf.
    Wie schon geschrieben, verändere ich ein Vorlagen-Xml, um es dann an den Server zu senden. Z.B. so ersetze ich den TimeStamp:
    Code:
    doc.<entry>.<resource>.<MessageHeader>.<timestamp>.@value = DateTime.Now.ToString("yyyy-MM-ddTHH:mm:sszzzz")
    Die Punktschreibweise (<>.<>) liegt mir sehr, da es für mich so am einfachsten ist. Und alles läuft mit diesem Beispielcode soweit perfekt:
    Code:
            File.Copy("TerminService\Codeanfordern06.xml", mFile)
            doc = XElement.Load(mFile)
            doc.Save(mFile)
            doc.<entry>.<resource>.<MessageHeader>.<timestamp>.@value = DateTime.Now.ToString("yyyy-MM-ddTHH:mm:sszzzz")
            doc.<entry>.<resource>.<MessageHeader>.<source>.<endpoint>.@value = "mailto:" & MailAddrFrom
            doc.<entry>.<resource>.<ReferralRequest>.<requester>.<agent>.<identifier>.<value>.@value = mBsnr
            doc.<entry>.<resource>.<ReferralRequest>.<requester>.<onBehalfOf>.<identifier>.<value>.@value = mLanr
            If chbDring.Checked Then
                doc.<entry>.<resource>.<ReferralRequest>.<priority>.@value = "urgent"
            Else
                doc.<entry>.<resource>.<ReferralRequest>.<priority>.@value = "routine"
            End If
    Nun habe ich bis hierher den Namespace ausser acht gelassen. Und der muss nun noch an 3 Stellen in der Form <Bundle xmlns="http://hl7.org/fhir"> ins Dokument rein, bzw. ich will das gleich in der Vorlage ändern. Danach bringt der Zugriff auf die Elemente aber Fehler. Z.B.
    Code:
    Dim specialty As XElement = doc.<entry>.<resource>.<ReferralRequest>.<specialty>.ElementAt(0)
    wirft jetzt (mit eingefügtem Namespace) die Exception "Das angegebene Argument liegt außerhalb des gültigen Wertebereichs". Unten habe ich das gesamte XML angefügt, mit den 3 Namespace-Angaben (wie von der Telematik gefordert).

    Im Netz konnte ich sehen, dass ich
    1. einen Import machen muss (Imports <xmlns:xsi="http://hl7.org/fhir">)
    2. ein GetNamespace machen muss (Private xsi As XNamespace = GetXmlNamespace(xsi))
    3. beim Zugriff auf ein XElement den Namespace angeben muss

    Ich habe damit experimentiert (ohne zu wissen, was ich da eigentlich tue). Es bringt nix. Das ist für mich Hobbyprogrammierer zu starker Tobak. Das schnall ich nicht. Könnt ihr mir nochmal helfen?
    Viele Grüße
    Norbert
    Code:
    <Bundle xmlns="http://hl7.org/fhir">
      <id value="d753473c-34f2-4576-a4e8-e74e555ef14e" />
      <meta>
        <profile value="https://fhir.kbv.de/StructureDefinition/74_PR_ETS_Bundle" />
      </meta>
      <type value="message" />
      <entry>
        <fullUrl value="urn:uuid:e3ddbded-31d3-4505-805a-03b0d941621e" />
        <resource>
          <MessageHeader xmlns="http://hl7.org/fhir">
            <id value="e3ddbded-31d3-4505-805a-03b0d941621e" />
            <meta>
              <profile value="https://fhir.kbv.de/StructureDefinition/74_PR_ETS_MH_Vermittlungscodes-anfordern_Request" />
            </meta>
            <event>
              <system value="https://fhir.kbv.de/CodeSystem/74_CS_ETS_Events" />
              <code value="vermittlungscode-anfordern" />
            </event>
            <timestamp value="2018-11-14T08:00:00+01:00" />
            <source>
              <endpoint value="mailto:[email protected]" />
            </source>
            <focus>
              <reference value="urn:uuid:b777414e-7a7f-4391-9f46-7d0c9fb6a42b" />
            </focus>
          </MessageHeader>
        </resource>
      </entry>
      <entry>
        <fullUrl value="urn:uuid:b777414e-7a7f-4391-9f46-7d0c9fb6a42b" />
        <resource>
          <ReferralRequest xmlns="http://hl7.org/fhir">
            <id value="b777414e-7a7f-4391-9f46-7d0c9fb6a42b" />
            <meta>
              <profile value="https://fhir.kbv.de/StructureDefinition/74_PR_ETS_Referralrequest_anforderung_muster06" />
            </meta>
            <status value="draft" />
            <intent value="order" />
            <type>
              <coding>
                <system value="http://www.kbv.de/fhir/CodeSystem/74_CS_AW_Anlagetyp" />
                <code value="KV-Muster_6" />
              </coding>
            </type>
            <priority value="routine" />
            <subject>
              <display value="-" />
            </subject>
            <requester>
              <agent>
                <identifier>
                  <system value="http://fhir.de/NamingSystem/kbv/lanr" />
                  <value value="123456400" />
                </identifier>
              </agent>
              <onBehalfOf>
                <identifier>
                  <system value="http://fhir.de/NamingSystem/kbv/bsnr" />
                  <value value="991234500" />
                </identifier>
              </onBehalfOf>
            </requester>
            <specialty>
              <extension url="https://fhir.kbv.de/StructureDefinition/74_EX_ETS_AdditionalQualification">
                <valueCoding>
                  <system value="https://fhir.kbv.de/CodeSystem/74_CS_SFHIR_BAR_ZUSATZBEZEICHNUNG" />
                  <code value="009" />
                </valueCoding>
              </extension>
              <extension url="https://fhir.kbv.de/StructureDefinition/74_EX_ETS_AdditionalQualification">
                <valueCoding>
                  <system value="https://fhir.kbv.de/CodeSystem/74_CS_SFHIR_BAR_ZUSATZBEZEICHNUNG" />
                  <code value="015" />
                </valueCoding>
              </extension>
              <extension url="https://fhir.kbv.de/StructureDefinition/74_EX_ETS_AdditionalQualification">
                <valueCoding>
                  <system value="https://fhir.kbv.de/CodeSystem/74_CS_SFHIR_BAR_ZUSATZBEZEICHNUNG" />
                  <code value="027" />
                </valueCoding>
              </extension>
              <coding>
                <system value="https://fhir.kbv.de/CodeSystem/74_CS_SFHIR_BPL_ARZTGRUPPE" />
                <code value="04" />
              </coding>
            </specialty>
          </ReferralRequest>
        </resource>
      </entry>
    </Bundle>



  • #2
    ot
    Nur mal so aus unverhohlener Neugier, du nennst Dich Hobbyprogrammierer und arbeitetest mit den Telematikunterlagen an KV Safenet Daten.
    Muss man sich irgendwie Sorgen machen?

    /ot

    Comment


    • #3
      Worüber machst Du Dir Sorgen? Bin halt kein Informatiker, nur ein kleiner Landarzt. Hab mein PVS vor 25 Jahren begonnen in VB.Net zu programmieren. Inzwischen hat meine Tochter die Praxis. Ich programmiere nur für sie. Das PVS ist auf dem aktuellen Stand, hat teilweise mehr Features als andere "große" Programme, ist schneller als andere Programme (MySql auf Samba-Server - Schwiegersohn), hat alle Zertifizierungen der KBV und der Telematik und der Gematik und und ... Also worüber musst Du Dich sorgen?

      Leider ist XML schon immer für mich ein Problem. Ich bin nie so richtig reingewachsen. Aber Dank freundlicher Leute in den Foren habe ich schon viel Hilfe bekommen und viel gelernt. Vielleicht bekomme ich auch hier eine Hilfestellung zum Problem: wie muss die Syntax aussehen, wenn man auf ein XElement zugreifen will und ein Namespace angegeben ist? Und wie muss ich den Namespace in Vb.Net behandeln?

      Comment


      • #4
        Die Doku auf doc.microsoft.com https://docs.microsoft.com/en-us/dot...xml-namespaces hat doch Beispiele, hier noch eins:

        Code:
        Imports System.Xml.Linq
        Imports <xmlns="http://example.com">
        
        Module Module1
        
            Sub Main()
                Dim doc As XDocument = XDocument.Parse("<pf1:root xmlns:pf1='http://example.com'><pf1:item>data</pf1:item></pf1:root>")
                Console.WriteLine(doc.<root>.<item>.Value)
            End Sub
        
        End Module
        Ausgabe: "data". An der "Pfad"-Notation ändert sich eigentlich gar nichts, nur durch die Deklaration (für deinen Fall dann wohl

        Code:
        Imports <xmlns="http://hl7.org/fhir">
        wird dann durch <item> nicht mehr ein Element "item" in keinem Namensraum selektiert sondern eines in dem im Imports deklarierten.

        Mit komplexen XML-Dokumenten mit verschiedenen Namensräumen muss man dann halt mehrere Imports-Deklaration benutzen, die weiteren halt mit Präfix und diese Präfixe dann in die Pfade einbauen
        Code:
        Imports <xmlns:pf="http://example.org/">
        
          doc.<pf:root>.<pf:item>
        Generell gilt, nicht gleich mit dem komplexen Daten anfangen, sondern erst mit einfachen Beispielen den Selektionsmechanismus verstehen, dann die Komplexität der Beispiele erhöhen, wenn die funktionieren, dann klappt das auch mit beliebigen, "real word" Daten.

        Comment


        • #5
          Vielen Dank Martin! Habs jetzt zu 90% verstanden. Und es funktioniert auch! Musste mich bislang im normalen Code (ohne XML) nie mit Namespaces rumschlagen. Da wird man in VB verwöhnt. Anders als in C#, wo ich das in Beispielcodes sehr häufig sehe.
          Schönes Wochenende und ein erholsames Pfingsten
          Norbert

          Comment


          • #6

            OT

            Originally posted by strzata View Post
            Worüber machst Du Dir Sorgen? Bin halt kein Informatiker, nur ein kleiner Landarzt. ..
            Danke für Deine Antwort! Zunächst: Mir gefällt es immer sehr, wenn Menschen sich solchen Herausforderungen stellen, dazu lernen und gestalten. Das ist auch der Grund, warum ich in Foren versuche, anderen weiterzuhelfen.

            Ich kann es Dir ehrlich gesagt nicht sagen, worüber ich mir konkret Sorgen mache. Die Idee bzw. das Bild war, ein Laie arbeitet an und mit schutzwürdigen Patienten-Daten. Das muss überhaupt nicht schlimm sein, wenn es richtig gemacht wird.
            Kleine Denk-Probe dazu: Ich lese seit 25 Jahren medizinische Fachliteratur, arbeite zur Aushilfe in der Praxis einer befreundeten Tierärztin und kümmere mich im Freundes und Bekanntenkreis um Gesundheitsfragen. Dank der Möglichkeiten in der Tierarztpraxis geht das soweit, dass ..
            Muss man sich da Sorgen machen?

            Zufällig habe ich mal für eine KV gearbeitet (EDV Beratung) und bekomme gelegentlich mit, was Arztsoftware (nicht) kann. Gefühlt gehört sie zusammen mit RA Software zum schlechtesten, was ich kenne. Dazu kostet sie viel Geld und hat damit ein schlechtes Preis/Leistungsverhältnis. Vielleicht finden sich da schon Gründe, warum Du das lieber selbst in die Hand genommen hast.

            Ich will das jetzt nicht künstlich aufblasen und schon gar nicht Deine Aktivitäten schlecht reden, im Gegenteil, meine Fragestellung könnte so lauten:
            Wenn ein (1) Autodidakt, schnelle, funktionierende, zertifizierte Arztsoftware schreiben kann, was machen dann die anderen Anbieter?
            /OT

            Comment


            • #7
              Originally posted by defo2 View Post
              was machen dann die anderen Anbieter?
              Das frage ich mich auch immer. Ich weiss von Softwarehäusern, die 50 Programmierer beschäftigen. Und die sagen, sie seien überlastet. Sie kämen den immer neuen Anforderungen kaum noch hinterher. Ich denke, viele Köche verderben hier den Brei. Da wird die Software sicher so zerfleddert, dass das einheitliche Ganze auf der Strecke bleibt. Und dann zahlen die Anwender 300 € pro Monat Wartungsgebühr und für jedes neue Modul nochmal extra. Bin gespannt, was da wieder für den Terminservice fällig wird. Ich bin damit fast durch und habe dazu neben meiner Arzt-Tätigkeit kaum 4 Wochen gebraucht. Den Konnektor anzubinden hat auch nicht viel länger gedauert. Ohne die Hilfe von netten Leuten in den Foren (besonders hier) hätte ich es aber auch nicht geschafft. An den Wochenenden muss ich dafür natürlich täglich 14 Stunden ran. Eigentlich für eine (1) Praxis ein viel zu hoher Aufwand. Aber die Vorteile überwiegen. Und mein Töchterlein ist überglücklich, die Hotline im Haus zu haben ...



              Comment

              Working...
              X