如何使用libXML2读取XML而不使用字符串函数?

时间:2016-07-15 22:25:48

标签: c xml xsd libxml2

基本上,我有多个XSD文件用于文件格式,因为它是配置程序的主要方法,所以我需要带有英文字符串的版本,带有德语字符串的版本等等。如果文件在其{ {1}}声明它正在使用的XSD,似乎我应该能够通过它而无需进行字符串比较。

e.g。我想避免这样做:

<schema>

因为字符串“settings”会根据所使用的xsd文件而改变,所以它可能是“paramètres”或“einstellungen”等。通常这是通过单独的stings文件来完成的,但似乎xsd具有所有的作为字符串文件运行所需的信息。

但是,不清楚例如,如果元素中的第n个属性是由XSD定义为可选的默认值,libxml2会告诉我它是第n个属性,并在迭代时给它默认值节点中的属性?

同样地,似乎应该有办法找出一个元素是xmlNodePtr cur = xmlDocGetRootElement(doc); if(!xmlStrncmp(cur->name, (const xmlChar *) "settings")) { // do things } 中的第n个元素或<xs:choice>中的第n个元素,但我不能我弄明白该怎么做。

e.g。在这个枚举中:

<xs:enumeration>

“葡萄糖”按照它们出现的顺序为0,“果糖”1,“蔗糖”2等。

有没有一个像样的方法呢?

1 个答案:

答案 0 :(得分:1)

您的麻烦源于您为维护并行XSD所做的设计决策,这些XSD具有语义相同的组件,但词汇名称不同。

不要那样做。

这是一个糟糕的设计决定,会破坏标准XML词汇的好处。选择一个命名约定,包括一种自然语言,并一致地使用它。

保存I18N以翻译内容(请参阅Best Practices for XML Internationalization),而不是标记