【问题标题】:Code Synthesis XSD parsing/data binding xml string instead of xml file代码合成 XSD 解析/数据绑定 xml 字符串而不是 xml 文件
【发布时间】:2012-04-18 18:51:48
【问题描述】:

我到处都看到了教程,用于解释如果您在系统上的文件中提供 xml,如何让代码合成 xsd 工作,但我找不到任何关于将 xml 作为字符串提供的信息。

我正在从 TCP 连接接收 xml,并尝试使用 Code Synthesis xsd 对其进行解析,当我已经将它作为字符串保存在内存中时,创建 xml 文件似乎是一个无用的附加步骤。

是的,这是用 C++ 编写的。

【问题讨论】:

    标签: c++ xml xsd xml-parsing codesynthesis


    【解决方案1】:

    您可以使用 std::istringstream 使字符串显示为 std::istream 然后对其进行解析:

    #include <sstream>
    
    std::string str = ... // Input XML in a string.
    std::istringstream istr (str);
    
    std::auto_ptr<root_type> r = root (istr);
    

    这里的 root_type 是类型,root 是 XML 根元素的名称。除了使用 std::ostringstream:

    之外,相同的方法适用于序列化
    #include <sstream>
    
    std::ostringstream ostr;
    
    root (ostr, *r, ...);
    std::string str = ostr.str () // Output XML in a string.
    

    【讨论】:

    • 注意:解析默认进行验证,所以当在可执行路径中找不到.xsd文件时会抛出可怕的instance document parsing failed异常。为了安全起见,您可能想尝试一下:root_ (istr, xml_schema::flags::dont_validate);
    • @count0:您可以使用 xml_schema::properties 指定 XSD 文件,例如参见 stackoverflow.com/a/11267720/757777
    猜你喜欢
    • 2023-04-11
    • 1970-01-01
    • 2013-09-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-10-08
    • 2012-09-15
    相关资源
    最近更新 更多