6

我正在使用这个很棒的工具 (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 ());

但我想要的是仅获取 <address> xml 子节点,例如。这有可能吗?怎样才能完成?

谢谢

4

2 回答 2

0

对的,这是可能的。如果您希望能够仅序列化地址元素,则需要将--root-element选项传递给 CodeSynthesis XSD 命令。在 Ubuntu 中你会写

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

另一方面,如果您只需要地址的值,则可以完全跳过序列化并只使用生成的 get 函数address()

于 2012-06-29T08:04:03.537 回答
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。默认情况下,只发出 parse 方法。

xsdcxx cxx-tree --generate-serialization {source XSD files}
于 2011-07-07T00:59:02.903 回答