Wie bekomme ich xml Zeilennummer von ptree Ausnahme

8

Ich benutze boost ptree, um eine XML-Datei wie folgt zu lesen:

%Vor%

Ich weiß, dass ich die Funktion what() verwenden kann, aber es erzeugt einen Fehler und die Zeichenfolgen, die ich gerade gesendet habe.

Gibt es eine Möglichkeit, nützlichere Informationen wie die Zeilennummern in der XML-Datei zu erhalten, die für den Anruf relevant sind?

    
yonigo 22.07.2013, 05:55
quelle

2 Antworten

2

Wenn Sie fehlerhafte XML-Dateien erkennen möchten (im Gegensatz zu XML-Dokumenten, die einfach nicht die erwarteten Werte enthalten, in diesem Fall ist es nicht möglich, Zeilennummern zu erhalten):

%Vor%

Nun, da t.xml kein gültiges XML-Dokument ist:

%Vor%     
John Zwinck 22.07.2013 06:39
quelle
0

Ein boost :: property_tree hat kein Konzept mehr für Zeilennummern. Grundsätzlich ist es nur ein iterabler Baum. Es weiß nicht, ob sein Inhalt aus einer Datei geparst, programmgesteuert hinzugefügt wurde oder aus dem Nichts kam. Daher gibt es keine Möglichkeit, eine Zeilennummer zu erhalten, wenn der Baum die gesuchten Werte nicht enthält.

Dinge, die Sie beachten sollten:

  • Verbessern Sie Ihr XML-Schema, um fehlende Informationen zur Analysezeit zu erfassen. Da @JohnZwinck bereits darauf hingewiesen hat, existieren beim Parsen noch Zeilennummern. Sie sollten auf jeden Fall in der Lage sein auszuschließen, "dass die Person, die das XML erstellt, entschieden hat, [irgendetwas strukturell] zu ändern" Sie machen es so, als wären sie dafür verantwortlich zu entscheiden, wie das XML aussehen soll. Selbst wenn dies der Fall ist, erwartet Ihr Programm dennoch, dass das XML in einer bestimmten Weise gebildet wird, um sinnvolle Dinge damit zu tun. Und hier kommt dein Schema ins Spiel. Wenn sie nun ihr Schema ändern, bemerken Sie sofort, wo das Schema, für das Sie entworfen haben, nicht stimmt.
  • Verwenden Sie eine andere Variante von get<string> . Es gibt viele Varianten, mit denen Sie Standardwerte festlegen, null oder andere Aktionen ausführen können, wenn die erwarteten Daten nicht vorhanden sind.
    Ihr try-instant-catch-debug-continue-Codemuster deutet darauf hin, dass Sie nicht ganz sicher sind, welche Daten zu erwarten sind und dass es unkritisch ist, wenn die Daten nicht vorhanden sind. Ausnahmen sind für Ausnahmesituationen vorgesehen. Es scheint mir, dass das nicht eins ist.
LumpN 22.12.2013 19:38
quelle

Tags und Links