如何使用c中的libxml2对基于属性的xml文件进行分类

时间:2012-09-23 16:02:01

标签: c xml xml-parsing libxml2

我的任务是将xml内容区分为组, 例如 我有两个xml文件

<?xml version="1.0"?>
<marks>
<firstname>john</firstname>
<lastname>peter</lastname>
<subject name="english" marks="30">pass</heading>
</marks>

<?xml version="1.0"?>
<marks>
<firstname>james</firstname>
<lastname>cameron</lastname>
<subject name="english" marks="30" degree="masters">pass</heading>
</marks>

所以我需要解析上面的示例xml文件,需要将它们分成组,并计算硕士生,博士生,学士学生的数量

每个小组都有元素部分的附加属性,对于硕士生,主题元素“将具有博士生的属性学位,他们将成为专业的属性

我可以获取xml文件的属性并在c函数中对其进行编码,如果我们有属性名称度,请将它们视为硕士生,但有没有其他方法可以 基于xml请求构建DTD,并使用libxml2来验证DTD并区分请求(我必须通过使用libxml2库来解决它,还不知道)

随着不同类型的xml请求数量的增加,我无法对它们编写多个if循环进行硬编码。

可以为特定类型的请求创建一个dtd,只需使用一行代码来验证该请求,但现在确定它真的可能......

请求你提出你的想法。

1 个答案:

答案 0 :(得分:0)

我理解标题给出的问题:“如何通过在c中使用libxml2 xml解析来基于DTD验证xml”。这很容易回答。它实际上是Dtd validation with libxml2的副本,因此应该关闭。

然后是描述,结果证明问题完全不同。您可能需要一些项目设计方面的帮助。也许你应该稍微更改标题?

关于你的设计:你为什么不想使用if?您希望可以在不重新编译应用程序的情况下更改它吗?所以你需要在配置文件中放下所有的情况。阅读文件并采取相应行动。

尝试回答设计部分:

每种请求的单独dtd也可以,但是你必须按顺序对所有dtd验证xml。如果性能成本是可以接受的,那么你可以这样做。所有dtd(或xsd模式)都可以在初始化阶段读入内存,然后针对xml样本进行尝试,直到验证为止。

要检查您的xml是否包含给定元素中的给定属性,您还可以使用libxml中的XPath。请参阅this questionXPath examples。请注意xmlXPathEvalExpression用法。