使用libxml2读取XML

我在LINUX平台上使用libxml2.so解析C语言中的XML文件。我的XML格式如下所述。我可以在文件中拥有任意数量的帐户。在有人在论坛上提出我之后,我第一次使用libxml。我能解析文件,我只有一个帐户。我不明白如果我有多个帐户,我该如何实施。任何人都可以在Linux上使用C,libxml实现此类功能。


   123 
   XYZ 
   GA 



   223 
   ABC 
   FL 

0
额外 编辑
意见: 1

1 答案

per XML-Definition, if you have more < ACCOUNT>s you need a surrounding tag f.e. < ACCOUNTS> around all the < ACCOUNT>-tags.

if you have that, you can go "into" the child, and you can while() over the ->next nodes.

EDITH: i suppose you use the DOM-modell. But if you have many (!) < ACCOUNT>s, you should swith to SAX for memory reasons. DOM builds a complete (M)apping of the (D)ocument to (O)bjects in memory.

在SAX中,您将创建一个状态机,在完成文件/内存的读取时触发,用于每个开始标记和结束标记和数据。

EDITH 2: if you have to find a special value you should consider to put the key-value (account_no?) into an attribute like < ACCOUNT no="123"> < NAME>< XYZ> < STATE>FL< /STATE> < /ACCOUNT>

0
额外
+1 ..你的意思是我应该有这样的 123 .. 234
额外 作者 dicaprio,
我还有一个问题是,我们可以验证是否有结束标记,f.e 标记是否有相应的?如果是的话,我可以使用哪些功能?
额外 作者 dicaprio,
我可以阅读以了解在C中使用SAX的任何好的参考?
额外 作者 dicaprio,
是的!也发现这一个.. http://www.jamesh.id.au/articles/libxml-sax/libxml-sax.‌ html#介绍
额外 作者 dicaprio,
额外 作者 dicaprio,
是。我对此做了第二个edith。
额外 作者 Peter Miehle,
如果您的XMLParseDocument()或ParseMemory(),如果文件/内存无效,则会出现错误。如果你用SAX来做,你的状态机应该能够处理这个。
额外 作者 Peter Miehle,
额外 作者 Peter Miehle,