【问题标题】:XML class description to C++ class description: a design pattern? [closed]XML 类描述到 C++ 类描述:一种设计模式? [关闭]
【发布时间】:2013-05-21 17:32:43
【问题描述】:

我想知道是否有针对这种情况的特定设计模式(可能针对 C++)。

我有一个包含这种格式数据的 XML 文件:

<STH_XML>
<tag1>
    <tag2 id="myId1">
        <tag3 name="type" value="myVal1"/>
        <tag4 name="device" value="myVal2"/>
        <tag5 name="instances" value="myVal3"/>
        <tag6>
            <tag7 id="myId2">
                <specs name="type" value="myVal4"/>
                <specs name="frequency" value="myVal5" unit="MHz"/>
            </tag7>
        </tag6>
    </tag2>
</tag1>

很遗憾,此 XML 的 XSD/DTD 经常更改。

我需要自动将 XSD/DTD 转换成一系列 C++ 结构或类,如下所示:

struct tag7
{
   std::string id;
   std::string type;
   std::string frequency;
}

struct tag6
{
   std::set<tag7*> tag6s;
}

struct tag2
{
   std::string id;
   std::string type;
   std::string device;
   std::string instances;
   tag6 elem6; // because I know there is only one from the XSD analysis
}

struct tag1
{
   std::set<tag2> tag2s;
}

哪种设计模式最适合实现此功能?

【问题讨论】:

    标签: c++ xml design-patterns xml-parsing


    【解决方案1】:

    不太确定这是您需要的设计模式。

    不过,我可以推荐一种编程范式:代码生成。

    您可以在 XSD/XDD 中定义您的结构,并自动生成您需要的 C++ structs。

    更进一步,您可以以与语言无关的格式定义事物,然后从该格式生成 XSD 和 C++。然后,稍后,如果您需要使用 C#,您可以为此编写代码生成器。

    在最基本的情况下,代码生成器读取文件,对其进行解析,然后通过解析数据上的一堆打印语句“生成”代码。

    此过程可以作为预构建步骤的一部分作为构建的一部分。生成器处理 XSD 以生成 C++,然后在剩下的过程中使用 C++ 构建您的项目。

    我想你已经知道你需要做什么,但code generation 是它的术语。

    【讨论】:

    • 非常感谢您分享您的见解。在这种情况下,您是否知道已经有任何特定的工具可以使用 XML/XSD 来执行此操作?
    • 我最后一次做这样的事情时使用的是一个名为 Jeeves 的 Perl 脚本。它让我可以从头开始准确地指定我想要的输出。到目前为止,这是我做到的唯一方法。但是有很多 XML 解析器可以用来解析你的 XSD。从那里,你知道你想生成什么 C++,所以只需遍历 XSD 和 cout 你的 C++。我认为您可能会比尝试自定义开箱即用的巨型库更快地到达您想去的地方。
    猜你喜欢
    • 2011-07-24
    • 1970-01-01
    • 2018-06-01
    • 1970-01-01
    • 2012-10-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多