【问题标题】:Reading an XML using libxml2使用 libxml2 读取 XML
【发布时间】:2012-05-24 16:07:40
【问题描述】:

我正在使用 libxml2.so 在 LINUX 平台上解析 C 中的 XML 文件。我的 XML 格式如下所述。我可以在文件中拥有任意数量的帐户。在有人在论坛上建议我之后,我第一次使用 libxml。我能够解析我只有一个帐户的文件。如果我有多个帐户,我不明白如何实施。之前有人在 Linux 上的 C、libxml 中实现过这样的东西。

<ACCOUNT>
  <ACCOUNT_NO> 123 </ACCOUNT_NO>
  <NAME> XYZ </XYZ>
  <STATE> GA </STATE>
</ACCOUNT>

<ACCOUNT>
  <ACCOUNT_NO> 223 </ACCOUNT_NO>
  <NAME> ABC </XYZ>
  <STATE> FL </STATE>
</ACCOUNT>

【问题讨论】:

    标签: c xml libxml2


    【解决方案1】:

    根据 XML 定义,如果您有更多 ,则需要一个环绕标签 f.e. 围绕所有 标记。

    如果你有这个,你可以“进入”孩子,你可以 while() 在 ->next 节点上。

    EDITH:我想你使用的是 DOM 模型。但是,如果您有很多 (!) ,出于内存原因,您应该切换到 SAX。 DOM 构建了 (D) 文档到内存中 (O) 对象的完整 (M) 映射。

    在 SAX 中,您为每个开始标签和结束标签和数据构建一个状态机,在文件/内存读取完成时触发该状态机。

    EDITH 2:如果你必须找到一个特殊的值,你应该考虑将键值(account_no?)放入像 FL

    【讨论】:

    • +1 .. 你的意思是我应该有这样的东西&lt;ACCOUNTS&gt;&lt;ACCOUNT&gt;123&lt;/ACCOUNT&gt;.. &lt;ACCOUNT&gt;234&lt;ACCOUNT&gt;&lt;/ACCOUNTS&gt;
    • 我还有一个问题是,我们可以验证我们是否有结束标签,f.e 标签有相应的 吗?如果可以,我可以使用哪个功能?
    • 如果您使用 XMLParseDocument() 或 ParseMemory(),如果文件/内存无效,则会出现错误。如果你用 SAX 来做,你的状态机应该可以处理这个。
    • 是的!也找到了这个..http://www.jamesh.id.au/articles/libxml-sax/libxml-sax.html#introduction
    猜你喜欢
    • 1970-01-01
    • 2014-05-24
    • 1970-01-01
    • 2023-04-11
    • 1970-01-01
    • 1970-01-01
    • 2012-12-16
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多