0

我的任务是将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,并只使用一行代码来验证该请求,但现在确定它真的有可能..

请求你说出你的想法。

4

1 回答 1

0

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

但是随后出现了描述,事实证明问题完全不同。您可能在项目设计方面需要一些帮助。也许你应该稍微改变一下标题?

至于你的设计:你为什么不想使用ifs?您希望可以在不重新编译应用程序的情况下更改它吗?所以你需要把所有的case都写在一个配置文件里。阅读文件并采取相应措施。

试图回答设计部分:

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

要检查您的 xml 是否在给定元素中包含给定属性,您还可以使用 libxml 中的 XPath。请参阅此问题XPath 示例。注意xmlXPathEvalExpression 的使用。

于 2012-09-23T17:02:56.423 回答