XML类描述到c++类描述:一种设计模式

XML class description to C++ class description: a design pattern?

本文关键字:描述 设计模式 一种 c++ XML      更新时间:2023-10-16

我想知道是否有任何特定的设计模式(可能针对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;
}

什么设计模式最适合实现这个功能?

我不确定这是不是你需要的设计模式。

我可以推荐一种编程范例:代码生成。

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

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

最基本的是,代码生成器读取文件,解析它,然后通过对解析数据的一堆打印语句"生成"代码。

此过程可以作为构建前步骤的一部分。生成器处理XSD以生成c++,然后使用该c++构建您的项目。

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