【问题标题】:XML -> C parser generatorXML -> C 解析器生成器
【发布时间】:2010-09-22 08:59:35
【问题描述】:

我有一个 c 程序,它从 XML 文件中获取其设置。目前我正在使用 Xerces 来遍历数据,但是将每个 XML 值映射到一个变量变得相当乏味。

Java 程序也可以读取相同的 XML,由于 JAXB 在 Java 中创建了所有必要的类等,因此更加方便。我正在寻找可以创建“结构结构”或类似的东西。获取 c 结构而不是 c++ 类很重要,因为此代码将在 GPU 上运行。

我找到了“XML Booster”,目前正在阅读它的文档。你知道其他选择吗?需要在 linux 中可用。

【问题讨论】:

    标签: c linux xml-parsing parser-generator


    【解决方案1】:

    我使用 libxml 库。您仍然需要遍历 XML,但您会得到一个包含元素、属性、节点和子节点的链表,您可以跟踪这些链表。

    链接:http://xmlsoft.org/index.html

    【讨论】:

    • 谢谢,但是 libxml 和 xerces 之间有很大的区别吗?我已经得到了一个节点列表,并且我进行了循环。我可能只是误解了一些关于 libxml 工作原理的基本知识,但我看了看它得出的结论是它不会改善这种情况。
    • 我不知道 Xerces。我正在“回答”您的“将每个 XML 值映射到一个变量”部分。
    • 感谢您回答了我的问题,但是“将每个 XML 值映射到一个变量”是我试图摆脱的问题,而不是重新创建 :)
    • LibXML 很棒,但它可以与用 C 编写的 Xerces 相媲美。它易于嵌入,并且像坦克一样坚固,但不会显着改变您的方法。
    【解决方案2】:

    鉴于您的 XML 文件具有通用模式,您可以使用 Bison+Flex 或简单的 ANTLR(C 运行时)来构造语法并将 XML 文件中的值提取到变量中。那些将在纯 C 中生成解析器,因此您无需担心。

    【讨论】:

      【解决方案3】:

      如果您有 xml 架构,请查看 xsd 代码合成。它为您的 xsd 生成了不错的 c++ 对象,您无需直接处理 xerces: http://www.codesynthesis.com/products/xsd/

      【讨论】:

      • 这是一个不错的选择,但我应该在问题中更清楚地表达自己。类不是一个选项,因为大部分应用程序都在 GPU 上运行。我需要纯 C 代码。我更新了我的问题以更好地反映这一点。
      • 这就是您需要考虑 Bison+Flex 的原因。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-09-27
      • 2012-09-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多