none
If then Abfrage innerhalb eines Xelement (XML) RRS feed

  • Frage

  • Hallo zusammen,

    leider komme ich an dieser Stelle nicht weiter.

    Ich habe eine Große XML Datei (ca 2000 zeilen) , die mithilfe eines Xelement erstellt wird. Dieses Programm wandelt eine CSV Datei in eine XML Datei um. Das funktioniert auch super.

    Das Problem ist, das ich gerne teile dieser XML Datei nur dann schreiben lassen möchte, wenn der Nutzer diesen teil in einer Checkbox aktiviert hat.

    Mein Ansatz war folgender: zuerst wollte ich den Part in einen separaten String schreiben


                Dim Cam2 As XElement = <track TL.SQTrackShy="0" TL.SQTrackExpandedHeight="25" TL.SQTrackExpanded="0" MZ.TrackTargeted="1">
                                           <clipitem id="clipitem-22">
                                               <masterclipid>masterclip-5</masterclipid>
                                               <name><%= ExDaNameCam2 %></name>
                                               <enabled>TRUE</enabled>
                                               <duration><%= ExDuration %></duration>
                                               <rate>
                                                   <timebase>25</timebase>
                                                   <ntsc>FALSE</ntsc>
                                               </rate>
                                               <start>0</start>
                                               <end><%= ExDuration %></end>
                                               <in>0</in>
                                               <out><%= ExDuration %></out>
                                               <pproTicksIn>0</pproTicksIn>
                                               <pproTicksOut><%= ExDuration * 6350400000000 %></pproTicksOut>
                                               <alphatype>none</alphatype>
                                               <file id="file-5"/>
                                               <logginginfo>
                                                   <description></description>
                                                   <scene></scene>
                                                   <shottake></shottake>
                                                   <lognote></lognote>
                                               </logginginfo>
                                               <labels>
                                                   <label2>Iris</label2>
                                               </labels>
                                           </clipitem>
                                           <enabled>FALSE</enabled>
                                           <locked>FALSE</locked>
                                       </track>


    Später wollte ich diesen Teil in mitten der großen XML einfügen:

     <%= If(Exporteinstellungen.Cam2.CheckState.Checked = CheckState.Checked, Cam2) %>

    Leider bekomme ich nur diese Fehler Meldung:

    Vielleicht kann mir jemand weiterhelfen.

    Vielen Dank im voraus.

    Donnerstag, 13. Oktober 2016 08:36

Antworten

  • Hallo Elmar,

    vielen Dank für die schnelle Antwort.

    Ich habe nach einigen versuchen eine Lösung gefunden die funktioniert.

    Ich habe ein weiteres Xelement erstellt und die if abfrage vor der großen XML gestartet.

     Dim Cam2 As System.Xml.Linq.XElement
     If Exporteinstellungen.Cam2.CheckState = CheckState.Checked Then
     Cam2 = <track TL.SQTrackShy="0" TL.SQTrackExpandedHeight="25" TL.SQTrackExpanded="0" MZ.TrackTargeted="1">
                               <clipitem id="clipitem-22">
                                   <masterclipid>masterclip-5</masterclipid>
                                   <name><%= ExDaNameCam2 %></name>
                                   <enabled>TRUE</enabled>
                                   <duration><%= ExDuration %></duration>
                                   <rate>
                                       <timebase>25</timebase>
                                       <ntsc>FALSE</ntsc>
                                   </rate>
                                   <start>0</start>
                                   <end><%= ExDuration %></end>
                                   <in>0</in>
                                   <out><%= ExDuration %></out>
                                   <pproTicksIn>0</pproTicksIn>
                                   <pproTicksOut><%= ExDuration * 6350400000000 %></pproTicksOut>
                                   <alphatype>none</alphatype>
                                   <file id="file-5"/>
                                   <logginginfo>
                                       <description></description>
                                       <scene></scene>
                                       <shottake></shottake>
                                       <lognote></lognote>
                                   </logginginfo>
                                   <labels>
                                       <label2>Iris</label2>
                                   </labels>
                               </clipitem>
                               <enabled>FALSE</enabled>
                               <locked>FALSE</locked>
                           </track>
     Else
    Cam2 = <track TL.SQTrackShy="0" TL.SQTrackExpandedHeight="25" TL.SQTrackExpanded="0" MZ.TrackTargeted="1">
                               <enabled>FALSE</enabled>
                               <locked>FALSE</locked>
                           </track>
    
    End If

    und dann den Teil mit <%= Cam2 %> in der großen XML eingefügt.

    Gruß Jufk

    • Als Antwort markiert jufk Donnerstag, 13. Oktober 2016 11:57
    Donnerstag, 13. Oktober 2016 11:55

Alle Antworten

  • Hallo,

    so ganz ist nicht klar, wo die Variablen wegkommen. So scheint Exporteinstellungen.Cam2.CheckState.Checked sich auf eine Formular-Klasse und nicht auf die (aktuelle) Instanz des Formulars zu beziehen (Leider erlaubt Visual Basic das, kann damit aber nicht immer umgehen) - dann wäre es Me.Cam2.CheckState (wenn Cam2 auch die CheckBox im Formular ist).

    Hier wäre es vermutlich einfacher, auf die Visual Basic "XML-Verbesserungen" zu verzichten und Linq To Xml nativ zu verwenden. Du kannst jederzeit ein Element in ein Dokument einfügen, in dem Du die Add Methode beim übergeordneten Element verwendest.

    Gruß Elmar

    Donnerstag, 13. Oktober 2016 10:30
    Beantworter
  • Hallo Elmar,

    vielen Dank für die schnelle Antwort.

    Ich habe nach einigen versuchen eine Lösung gefunden die funktioniert.

    Ich habe ein weiteres Xelement erstellt und die if abfrage vor der großen XML gestartet.

     Dim Cam2 As System.Xml.Linq.XElement
     If Exporteinstellungen.Cam2.CheckState = CheckState.Checked Then
     Cam2 = <track TL.SQTrackShy="0" TL.SQTrackExpandedHeight="25" TL.SQTrackExpanded="0" MZ.TrackTargeted="1">
                               <clipitem id="clipitem-22">
                                   <masterclipid>masterclip-5</masterclipid>
                                   <name><%= ExDaNameCam2 %></name>
                                   <enabled>TRUE</enabled>
                                   <duration><%= ExDuration %></duration>
                                   <rate>
                                       <timebase>25</timebase>
                                       <ntsc>FALSE</ntsc>
                                   </rate>
                                   <start>0</start>
                                   <end><%= ExDuration %></end>
                                   <in>0</in>
                                   <out><%= ExDuration %></out>
                                   <pproTicksIn>0</pproTicksIn>
                                   <pproTicksOut><%= ExDuration * 6350400000000 %></pproTicksOut>
                                   <alphatype>none</alphatype>
                                   <file id="file-5"/>
                                   <logginginfo>
                                       <description></description>
                                       <scene></scene>
                                       <shottake></shottake>
                                       <lognote></lognote>
                                   </logginginfo>
                                   <labels>
                                       <label2>Iris</label2>
                                   </labels>
                               </clipitem>
                               <enabled>FALSE</enabled>
                               <locked>FALSE</locked>
                           </track>
     Else
    Cam2 = <track TL.SQTrackShy="0" TL.SQTrackExpandedHeight="25" TL.SQTrackExpanded="0" MZ.TrackTargeted="1">
                               <enabled>FALSE</enabled>
                               <locked>FALSE</locked>
                           </track>
    
    End If

    und dann den Teil mit <%= Cam2 %> in der großen XML eingefügt.

    Gruß Jufk

    • Als Antwort markiert jufk Donnerstag, 13. Oktober 2016 11:57
    Donnerstag, 13. Oktober 2016 11:55