标签: codesynthesis

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

我正在使用这个伟大的工具(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>
...
Run Code Online (Sandbox Code Playgroud)

我可以得到所有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 ());
Run Code Online (Sandbox Code Playgroud)

但我想要的只是获取<address> xml子节点.这有可能吗?怎么可以完成?

谢谢

c++ mapping tree codesynthesis

6
推荐指数
1
解决办法
1434
查看次数

C++序列化Clean XML与XSTREAM类似

我需要编写一个linux c ++应用程序,它以XML格式保存设置(便于手动编辑),并通过套接字和HTTP上的XML消息与现有应用程序通信.问题是我找不到任何智能库来帮助我,我并不特别喜欢编写DOM或SAX代码来编写和阅读一些非常简单的消息.

Boost Serialization几乎是匹配,但它为它生成的xml添加了许多特定于boost的数据.这显然不适用于交换格式.我想知道是否有可能使Boost Serialization或其他一些c ++序列化库生成干净的xml.我不介意是否有一些必需的额外属性 - 比如版本属性,但我真的希望能够控制他们的命名并摆脱我不使用的'功能' - tracking_level和class_id for实例.

理想情况下,我只想在Java中使用类似于xstream的东西.我知道c ++缺乏内省,因此有必要进行一些手动编码 - 但是如果有一个干净的解决方案来读取和编写简单的XML而没有kludges会很好!

如果无法做到这一点,我也对XML模式是规范资源(合同优先)的工具感兴趣 - 一个很好的JAXB替代C++.到目前为止,我只找到了像CodeSynthesis XSD这样的商业解决方案.我更喜欢开源解决方案.我尝试过gSoap - 但是它生成了非常丑陋的代码,并且它也是特定于SOAP的.

无奈之下,我也开始研究protobuffers的替代序列化格式.这存在 - 但仅限Java!令我惊讶的是,协议缓冲区似乎是比XML更好的支持数据交换格式.

我很生气只为这个应用程序找到libs,我真的需要一些新的想法.任何人?

c++ xstream xml-serialization codesynthesis boost-serialization

5
推荐指数
1
解决办法
2108
查看次数