Warum sucht boost :: serialization nicht nach Tag-Namen in XML-Archiven?

8

Ich fange an, Boost :: Serialisierung in XML-Archiven zu verwenden. Ich kann Daten erzeugen und lesen, aber wenn ich das XML manuell modifiziere und zwei Tags vertausche, "scheitert es" (d. H. Es läuft glücklich ab).

Hier ist ein kleines, selbst abgeschlossenes Beispiel, das zeigt, was ich sehe:

%Vor%

Dies schreibt XML in die Standardausgabe, die Folgendes enthält:

%Vor%

Jetzt ersetze ich den gesamten Code in der Hauptfunktion durch ein Lesegerät:

%Vor%

funktioniert wie erwartet, wenn die vorherige Ausgabe (Ausgänge "XXX 0.0.1") zugeführt wird. Wenn ich jedoch XML füttere, in dem ich die Reihenfolge der beiden Zeilen "Producer" und "Producer_Version" geändert habe, läuft es immer noch und gibt "0.0.1 XXX" aus.

Daher erkennt es nicht, dass die Tags nicht die erwarteten Namen haben, und fahren einfach fort. Ich hätte erwartet, dass es eine xml_archive_parsing_error -Ausnahme ausgelöst hat, wie in angegeben das Dokument .

Hat jemand hier Erfahrung damit? Was mache ich falsch?

    
F'x 08.02.2010, 18:49
quelle

1 Antwort

6

Wenn Sie nur die Reihenfolge der beiden Zeilen ändern, wird keine xml_archive_parsing_error -Ausnahme verursacht. Das Dokument , das Sie verlinkt haben, sagt das selbst:

  

(...) Dies ist möglicherweise möglich, wenn nur die Daten geändert werden und nicht die XML-Attribute und die Verschachtelungsstruktur unverändert bleiben. (...)

Sie haben die Attribute nicht geändert und die Reihenfolgeänderung hat die Struktur beibehalten (immer noch zwei Felder auf der ersten Ebene Ihres XML). Keine Ausnahme wird jemals auf diese Weise geworfen werden.

Auch beim Lesen eines XML-Codes mit make_nvp function wird durch den name-Parameter keine Einschränkung hinsichtlich des Lesevorgangs vorgenommen. Es wird nur willkürlich den Namen angeben, der mit dem neuen Name-Wert-Paar verwendet werden soll.

Sie können also den Namen Ihrer XML-Tags in Ihrer Eingabe ändern, solange Sie Ihre erwartete Reihenfolge nicht ändern, dh Sie könnten producer und producer_version in Ihrem XML in foo und bar umbenennen und würde immer noch die serialisierten Daten richtig lesen, zB:

  

<foo>XXX</foo>
<bar>0.0.1</bar>

Und Ihre gedruckte Antwort wäre immer noch "XXX 0.0.1" .

Da nur Ihre serialisierten Daten als XML formatiert werden, besteht kein Interesse daran, die Tag-Namen zu überprüfen. Sie dienen nur dazu, Ihre serialisierte Ausgabe lesbarer zu machen.

    
fogo 08.02.2010, 19:28
quelle