c++ - XML 类描述到 C++ 类描述 : a design pattern?

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

<分区>

我想知道是否有针对这种情况的特定设计模式(可能针对 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++ 用于构建项目的其余部分。

我认为您已经知道需要做什么,但代码生成 是它的术语。

关于c++ - XML 类描述到 C++ 类描述 : a design pattern?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16676092/

相关文章:

C++初始化模板类构造函数

c++ - 如何将 "struct tm"(VTYPE_TM) 转换为 DATE(double) - native API?

java - 如何从属性文件获取值以在 springConfig.xml 中输入

spring - 如何在AOP中实现策略模式

c++ - 如何创建一个可以向其传递函数或仿函数的方法?

c++ - "type name{}"在 C++ 中是什么意思?

java - xsd.exe/XMLSerializer 相当于 Java?

xml - 使用 XSL 将引号转换为斜引号

css - 检索网站代码中的常见 CSS 模式

java - 装饰模式问题