C++ 通过XML读取参数

发布于:2025-02-11 ⋅ 阅读:(13) ⋅ 点赞:(0)

目录

方法1:一次读取一个参数,每读取一个参数调用一次函数

方法2:一次性读取一个节点中的所有参数,然后调用一次函数

方法3:一次性读取所有参数

推荐方案

示例代码

总结


0、XML示例

<ConfigurationSettings>
    <ImagingModule>
        <ROIConfiguration>
            <ConfigurationParameter name="LightingType" value="2" description="1: Front lighting; 2: Rear lighting; Default: 1."/>
            <ConfigurationParameter name="ROIThreshold" value="30" description="Threshold for identifying the region of interest (ROI); Range: [0, 255]; Default: 20."/>
        </ROIConfiguration>
        
        <ImagePreprocessing>
            <ConfigurationParameter name="EdgeExclusion" value="5" description="Size of the edge exclusion zone; Range: [1, 50]; Default: 3."/>
            <ConfigurationParameter name="CorrectionApplied" value="1" description="Apply geometric correction; 0 or 1; Default: 1."/>
            <ConfigurationParameter name="ContrastEnhancement" value="0" description="Enable/Disable contrast enhancement; 0 or 1; Default: 1."/>
            <ConfigurationParameter name="DownscaleFactor" value="1.5" description="Downscaling factor for preprocessing steps; Default: 2."/>
            <ConfigurationParameter name="GaussianBlurSigma" value="5" description="Standard deviation for Gaussian blur applied; Default: 10."/>
            <ConfigurationParameter name="NonLocalMeansStrength" value="20" description="Strength parameter for non-local means denoising; Default: 50."/>
        </ImagePreprocessing>
    </ImagingModule>
</ConfigurationSettings>

方法1:一次读取一个参数,每读取一个参数调用一次函数

  • 优点

    • 逻辑简单:每次只处理一个参数,代码逻辑清晰,容易理解和维护。

    • 灵活性高:如果某个参数有问题(如格式错误),可以单独处理,而不影响其他参数。

  • 缺点

    • 性能问题:如果XML文件中有大量参数,频繁调用函数会导致性能下降,尤其是在文件较大时。

    • 代码冗余:每次调用函数都需要重复一些逻辑,如打开和关闭节点等。

方法2:一次性读取一个节点中的所有参数,然后调用一次函数

  • 优点

    • 性能提升:减少函数调用次数,每次处理一个节点的所有参数,减少了重复的节点访问操作。

    • 代码简洁:逻辑更加集中,减少代码冗余,便于维护。

  • 缺点

    • 内存占用:如果节点中的参数非常多,可能会占用较多内存(虽然对于50KB的文件影响不大,但如果后期文件增大,需要考虑)。

    • 错误处理复杂:如果一个节点中的某个参数有问题,可能需要额外的逻辑来处理。

方法3:一次性读取所有参数

  • 优点

    • 极致性能:只需要一次遍历XML文件,将所有参数读取到std::map中,性能最优。

    • 代码简洁:逻辑集中,代码更加简洁。

  • 缺点

    • 内存占用:需要一次性将所有参数加载到内存中,如果文件非常大,可能会导致内存不足。

    • 错误处理复杂:如果某个参数有问题,可能需要在读取过程中就处理,否则会影响整个程序的运行。

推荐方案

根据你的需求和文件大小(目前50KB,后期可能增大),推荐采用方法2(一次性读取一个节点中的所有参数,然后调用一次函数),理由如下:

  1. 性能和可维护性的平衡:方法2在性能和可维护性之间取得了较好的平衡。它减少了函数调用次数,同时逻辑相对集中,便于维护。

  2. 适应性:即使文件后期增大,方法2仍然可以通过优化节点处理逻辑来应对。例如,可以对每个节点的参数进行分批处理,避免内存占用过高。

  3. 错误处理:虽然方法2在错误处理上稍微复杂一些,但可以通过在节点处理过程中增加校验逻辑来解决。

示例代码

https://download.csdn.net/download/weixin_42215453/90364723

总结

  • 方法2(一次性读取一个节点中的所有参数,然后调用一次函数)是最推荐的方案,因为它在性能和可维护性之间取得了较好的平衡。

  • 如果文件后期确实会非常大(如超过100MB),可以考虑进一步优化,例如分批处理节点,或者采用流式解析(如XMLReader)来减少内存占用。