我正在使用这个很棒的工具(http://www.codesynthesis.com/products/xsd/c++/tree/)将xsd转换为c ++代码。
我正在尝试从子节点获取xml字符串,但我唯一可以获得的是所有xml,如下所示:
所有xml:
<?xml version="1.0"?>
<people ....>
<person id="1">
<first-name>John</first-name>
<address>
....
</address>
</person>
...
我可以让所有xml做这样的事情:
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 ());
但我想要的只是获得&lt;地址&gt;例如,xml子节点。这有可能吗?怎么可以完成?
由于
答案 0 :(得分:0)
如果我理解你在问什么,我想你想使用no_xml_declaration标志。
people (oss, p, map, "UTF-8",
xml_schema::flags::no_xml_declaration);
这会抑制XML声明,但对于某些版本的Xerces-C,它会在开头导致一个虚假的换行符,您需要删除它。 http://www.codesynthesis.com/pipermail/xsd-users/2009-December/002625.html
对于之后引用此问题的其他人,您还需要使用--generate-serialization调用xsdcxx。默认情况下,只会发出解析方法。
xsdcxx cxx-tree --generate-serialization {source XSD files}
答案 1 :(得分:0)
是的,有可能。如果您希望只能序列化地址元素,则需要将--root-element
选项传递给CodeSynthesis XSD命令。在Ubuntu中你会写
xsdcxx cxx-tree --root-element address --generate-serialization people.xsd
如果你另一方面只需要地址的值,你可以完全跳过序列化,只使用生成的get函数address()