使用xsdcxx树解析器的XSD到C++类.方法从文件中打开xml

XSD to C++ class using xsd cxx-tree parser. Methods to open a xml from a file.

本文关键字:方法 文件 xml C++ xsdcxx XSD 使用      更新时间:2023-10-16

我使用xsd 3.3.0编译器来将xsd(xml最好的朋友)文件解析为C++类。(参见最后一个网络链接)

命令名为

xsd cxx树(选项)文件.xsd

(+信息http://www.codesynthesis.com/projects/xsd/documentation/cxx/tree/guide/)

我看到了代码合成提供的一些示例,它们解析hello.xd文档并非常容易地创建.hxx和.cxx文件。.hxx有一个方法来打开一个xml文档,创建一个对象,在那里你可以找到xml的不同部分,检查它,等等。。。.hxx有一个这样的代码:

// Parse a URI or a local file.
//
::std::auto_ptr< ::hello_t >
hello (const ::std::string& uri,
::xml_schema::flags f = 0,
const ::xml_schema::properties& p = ::xml_schema::properties ());

它收到一个文件名为的字符串

字符串&uri="hello.xsd">

并创建您在main.cxx.中使用的对象

因此,我正在尝试对xsd文件执行同样的操作。我使用xsdcxx树编译器,但它没有创建"解析URI或本地文件"的方法。然后我就无法在主程序上从xml文件创建对象。

我使用codesys编译器文档中的不同选项解决了一些编译问题(http://www.codesynthesis.com/projects/xsd/documentation/xsd.xhtml)。关于你想编译什么,你想如何编译,等等,有不同的选项……但我找不到任何选项来启用用于"解析URI或本地文件"的方法。

提供更多的格式,xml xsd文档是CBML协议文档。

谢谢你的帮助!

我自己找到了解决方案!

我使用了不同的编译选项。我使用了选项"--root元素库",这导致没有创建"解析URI或本地文件"的方法。

我删除了这个选项,并添加了"--rootelement-all",它为所有主体对象创建解析方法!

现在我的程序工作了!谢谢

我一直在使用这个产品。

下面是一个你想做的事情的例子(我认为):

xsd cxx-tree hello.xsd

它生成hello.hxxhello.cxx,正如您所说。我认为您的不足之处在于了解如何使用这些文件来加载XML文件(例如,加载"本地文件")。

我喜欢明确地告诉软件在哪里可以找到XSD模式。以下代码将不会编译,但我已将其包含在内以供参考。

void load(const std::string &xml, const std::string &xsd) {
xml_schema::properties properties;
properties.no_namespace_schema_location(xsd);
// or, if you have a specific namespace you want to load, use
// props.schema_location("which namespace", xsd);
try {
std::auto_ptr< ::hello_t> xml_file = hello(xml, 0, props);
// operate on the xml_file via "->" notation
std::cout << xml_file->hello() << std::endl;
} catch (const ::xml_schema::exception &e) {
std::ostringstream os;
os << e.what();
// report the error as you see fit, use os.str() to get the string
}
}

请确保将*.cxx文件链接到您的*.cpp文件。

如果这不是你想要的,请在评论中告诉我,我可以尝试帮助你更多。