代码合成 XSD 树动态序列化
CodeSynthesis XSD tree serialization on the fly
我正在使用CodeSynthesis XSD工具根据给定的XSD文件生成XML文件。我知道可以构建一个XML树并将其序列化为流。但我的问题是:
是否可以逐个生成 XML 元素?
假设我想生成一个包含<element1>
和<element2>
的<root>
元素。现在我只能构建<root>
树并将其序列化为一个整体。我想要的是:
首先生成<root>
,然后<element1>...</element1>
<element2>...</element2>
,最后</root>
。
由于解析器支持回调,因此很容易在节点可用后立即控制每个节点。树映射也可以吗?
我挖掘了文档,但没有找到正确的答案。我将不胜感激任何可能的帮助或线索。提前致谢:)
---编辑---
为了清楚起见 - 首先,源 XML 数据是由我的程序生成的(而不是从现有的 XML 文件生成的);其次,我想在生成 XML 对象后立即对其进行序列化,而不是序列化整个树。
我知道 XSD/Tree 的目标是内存中类似树的处理,但我想知道是否可以像 xxx_open
和 xxx_close
等一样编写。
再次感谢。
是的,可以使用 CodeSynthesis XSD 逐个生成元素。例如,这个流式处理示例生成以下 XML 文件:
<?xml version="1.0" encoding="UTF-8" standalone="no" ?>
<op:object xmlns:op="http://www.codesynthesis.com/op" id="123" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.codesynthesis.com/op position.xsd">
<header>
<name>Lion's Head</name>
<type>rock</type>
</header>
<position lat="-33.8569" lon="18.5083"/>
<position lat="-33.8568" lon="18.5083"/>
<position lat="-33.8568" lon="18.5082"/>
<position lat="-33.857" lon="18.5083"/>
<position lat="-33.8569" lon="18.5084"/>
<position lat="-33.857" lon="18.5084"/>
<position lat="-33.857" lon="18.5082"/>
<position lat="-33.8569" lon="18.5082"/>
</op:object>
在文件驱动程序.cxx 中,每个位置元素都是通过调用生成的
s.next ("position", pos);
若要更好地控制将在输出中使用哪些命名空间前缀,可以从文件 serializer.hxx 中使用此函数
// Serialize next object model fragment into an element with the specified
// namespace and qualified name as well as namespace declarations.
//
template <typename T>
void
next (const std::string& ns,
const std::string& name,
const namespace_infomap&,
const T& x);
在文件driver.cxx中,位置对象是从XML DOM树中创建
的。position pos (*doc1->getDocumentElement ());
所以正在使用的是这个构造函数:
position (const ::xercesc::DOMElement& e,
::xml_schema::flags f = 0,
::xml_schema::container* c = 0);
这可以在生成的文件 position.hxx 中看到。
但是您提到您正在从非 XML 源创建对象,因此您需要使用将成员值作为输入的构造函数:
position (const lat_type&,
const lon_type&);
- 如何在C++中序列化结构数据
- 序列化,没有库的整数,得到奇怪的结果
- 如何知道QDataStream不能反序列化某些内容
- 如何使用Python从C++中读取谷物序列化数据
- 如何使用boost::具有嵌套结构和最小代码更改的序列化
- 带有Protobuf序列化的C++Hazelcast:字符串不是UTF-8格式的
- 自定义对象的dlib序列化在gcc中失败
- C++boost序列化多态性问题
- 动态初始化 C 与 C++ 中的静态值
- 增强基于 XML class_id的反序列化
- 提升反序列化对象具有 nan 或 -nan 值
- 在 cpp 中的平面缓冲区中序列化对象
- 每次进行继承时都需要提升::序列化::base_object吗?
- 如何在 c++ 非托管代码中反序列化 byte[] 的 json 字符串?
- 增强动态阵列的序列化
- 将供应序列化改为动态类型
- 代码合成 XSD 树动态序列化
- 序列化动态数组
- Boost动态序列化所有派生类型
- 从流或文件动态反序列化数据