基本上,我有多个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等。
有没有一个像样的方法呢?
答案 0 :(得分:1)
您的麻烦源于您为维护并行XSD所做的设计决策,这些XSD具有语义相同的组件,但词汇名称不同。
这是一个糟糕的设计决定,会破坏标准XML词汇的好处。选择一个命名约定,包括一种自然语言,并一致地使用它。
保存I18N以翻译内容(请参阅Best Practices for XML Internationalization),而不是标记。