代码综合 - C ++ / Tree子节点序列化

时间:2011-04-30 18:26:44

标签: c++ tree mapping codesynthesis

我正在使用这个很棒的工具(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子节点。这有可能吗?怎么可以完成?

由于

2 个答案:

答案 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()