【问题标题】:Parsing Nested Structures/Unions defined in C/C++ header files in XML解析 XML 中 C/C++ 头文件中定义的嵌套结构/联合
【发布时间】:2012-07-23 22:48:51
【问题描述】:

我有一个表示如下的结构:(示例)

struct struct3
{
   struct structchild4
   {  
      float child5;
   } child6;
   unsigned int child7;
};

我希望它在 XML 中表示如下:

<tag1= "struct3">
        <name>struct3</name>
        <input_type>byte</input_type>
        <method></method>
        <tag_ref = "structchild4">
            <name>child6</name>
        </tag_ref>
        <tag2= "child7">
            <name>child7</name>
            <len>4</len>
            <value> </value>
        </tag2>
    </tag1>

我遵循的方法是将其转换为 gccXML 格式,然后使用 Visual C++ 对其进行解析。我使用 xerces-c DOM 解析器。

有人能建议如何去做吗?谢谢!

【问题讨论】:

    标签: c++ c visual-c++


    【解决方案1】:

    更好的方法是反射,BoostLib 有一些可以使用。 你可以这样做:

    for( Attribute::Iterator it = reflectiveObject.getAttributeList().begin();
         it != reflectiveObject.getAttributeList().end();
         ++it )
    {
        XML.createNode( it.getAttributeName() );
    }
    

    //那么方法也一样。 应该有一个上层迭代器递归遍历类型,如果类型具有子类或子结构,则标识 XML 并为它们运行相同的代码。

    没有反射比较无聊,你应该为它创建一个Formater和一个Parser,比如

    if( dynamic_cast< DesirecClass* >( obj ) != NULL ){
        XML.createNode( typeid( obj ).name() );
    }
    // Hard Code (terrible treatment) for each attribute, etc...
    

    您还可以搜索一些解构方法。

    【讨论】:

    • 感谢@Rodrigo Gurgel。我的代码采用 gccXML 创建的 XML 并以其他特定格式返回 XML。我 90% 的代码使用 xerces-c。所以,我也必须为此使用 Xerces-C,但出于某种未知的原因,这让我很难过。
    猜你喜欢
    • 1970-01-01
    • 2012-08-01
    • 1970-01-01
    • 1970-01-01
    • 2012-03-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-10-15
    相关资源
    最近更新 更多