2011-04-30 11 views
6

Estoy usando esta gran herramienta (http://www.codesynthesis.com/products/xsd/c++/tree/) para convertir xsd en código C++.Síntesis del código - Serialización de subnodos C++/Tree

Estoy tratando de obtener la cadena XML desde un nodo secundario, pero la única cosa que puedo conseguir es el Todo XML, así:

del todo xml:

<?xml version="1.0"?> 
<people ....> 

    <person id="1"> 
    <first-name>John</first-name> 
    <address> 
     .... 
    </address> 
    </person> 
... 

I puede obtener el todo xml hacer 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 conseguir sólo el < dirección> xml sub nodo, por ejemplo. Esto es posible hacer? ¿Cómo se puede lograr?

Gracias

+0

suposición de que no es posible .. – Nuno

+0

No llegaría a una conclusión. No mucha gente ha analizado su pregunta, y es difícil creer que alguien construya una herramienta para trabajar con XML haciendo que los elementos del árbol XML sean accesibles de alguna manera. Entonces, aún puede haber una respuesta que simplemente no has escuchado. Por cierto, si se trata de un producto comercial, ¿no tiene un manual de referencia y qué dice ese manual? –

Respuesta

0

Si entiendo lo que estás pidiendo, creo que desea utilizar la bandera 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 da lugar a una nueva línea espuria al principio, que tendrá que 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} 
0

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 debería escribir

xsdcxx cxx-tree --root-element address --generate-serialization people.xsd 

Si por el contrario sólo tiene que el valor de la dirección, puede omitir la serialización por completo y sólo utilizar la función get generada address()

Cuestiones relacionadas