2012-05-06 10 views
6

Poszukuję prostego sposobu przekształcenia obiektu w C++ obiektu na reprezentację ciągów XML, więc w ten sposób mógłbym komunikować się z serwerem.C++ Obiekt do XML do komunikacji

Na przykład, załóżmy, że mam obiektu:

class A{ 
    string data1; 
    string data2; 
    string dataN; 
    list<B> bList; 
} 

class B{ 
    string moreData; 
} 

chciałbym następujące XML reprezentacji: (zakładamy, że stworzyłem jeden przykład i ma dwie instancje B)

<A> 
    <data1>content</data1> 
    <data2>content</data2> 
    <dataN>content</dataN> 
    <B> 
     <moreData>content</moreData> 
    </B>  
    <B> 
     <moreData>content</moreData> 
    </B> 
</A> 
+2

http://stackoverflow.com/questions/234724/how-to-serialize-in-c – m0skit0

+0

Jakie jest twoje pytanie? – Starkey

+0

@ m0skit0 to świetna biblioteka. Wziąłem przykład [boost XML] (http://www.boost.org/doc/libs/1_36_0/libs/serialization/example/demo_xml.cpp), ale generuje on plik XML zawierający więcej informacji, których potrzebuję (na przykład metadane odpowiadające elementom itd.) czy istnieje sposób na stworzenie prostszego wyniku, takiego jak ten, który opublikowałem w moim pytaniu? –

Odpowiedz

3

To, co opisujesz, jest określane jako powiązanie danych XML. Istnieje wiele produktów, które będą generować kod C++ i XSD lub DTD, zobacz listę http://www.xmldatabinding.org/ i http://www.rpbourret.com/xml/XMLDataBinding.htm, aby uzyskać więcej informacji.

Zapoznaj się również z tym XML Data Binding example for C++, pokazuje przykładowy schemat źródłowy i wygenerowany kod.

Jeśli Twoje schematy są dość proste i masz możliwość dostrojenia ich do generatora, prawdopodobnie istnieją pewne projekty open source, które wykonają zadanie. Jeśli jesteś wiążący ze standardem XML, to szybko natrafisz na ograniczenia większości generatorów. Generator Liquid XML radzi sobie prawie ze wszystkimi standardami XSD, ale trzeba za to zapłacić.

2

Więc nie ma standardowego sposobu, ponieważ, po prostu, ponieważ nie ma sposobu na serializowanie wskaźników i podobnych rzeczy. To zawsze będzie specyficzne dla aplikacji.

Można jednak utworzyć własną klasę i serializować, jak chcesz.

Co do parserów xml, czy próbowałeś this one? Jest niezwykle prosty, wydajny i łatwy do nauczenia. Zasadniczo zrobiłem to wszystko. Możesz nawet poprosić o licencję komercyjną.