lenguaje - librerias de c++
Síntesis de código-serialización de subnodos de C++/Tree (2)
Si entiendo lo que estás preguntando, creo que quieres usar el indicador no_xml_declaration.
people (oss, p, map, "UTF-8",
xml_schema::flags::no_xml_declaration);
Esto suprime la declaración XML, aunque para algunas versiones de Xerces-C resulta en una nueva línea espuria al principio que deberá eliminar. http://www.codesynthesis.com/pipermail/xsd-users/2009-December/002625.html
Para cualquier otra persona que haga referencia a esta pregunta más adelante, también debe invocar xsdcxx con --generate-serialization. Por defecto, solo se emiten métodos de análisis.
xsdcxx cxx-tree --generate-serialization {source XSD files}
Estoy usando esta gran herramienta (http://www.codesynthesis.com/products/xsd/c++/tree/) para convertir xsd en código c ++.
Estoy tratando de obtener la cadena xml de un subnodo, pero lo único que puedo obtener es el todo xml, como este:
el todo xml:
<?xml version="1.0"?>
<people ....>
<person id="1">
<first-name>John</first-name>
<address>
....
</address>
</person>
...
Puedo obtener todo el xml haciendo algo como esto:
people_t& p = ...
xml_schema::namespace_infomap map;
map[""].schema = "people.xsd";
// Serialize to a string.
//
std::ostringstream oss;
people (oss, p, map);
std::string xml (oss.str ());
Pero lo que quiero es obtener solo el <sub nodo <dirección> xml por ejemplo. Esto es posible hacer? ¿Cómo se puede lograr?
Gracias
Sí, es posible. Si desea poder serializar solo el elemento de dirección, debe pasar la opción --root-element
al comando CodeSynthesis XSD. En Ubuntu escribirías
xsdcxx cxx-tree --root-element address --generate-serialization people.xsd
Si, por otro lado, solo necesita el valor de la dirección, puede omitir la serialización y simplemente usar la address()
función get address()
generada