【发布时间】:2016-07-15 22:25:47
【问题描述】:
本质上,我有多个用于文件格式的 XSD 文件,因为它是配置程序的主要方法,所以我需要带有英文字符串的版本、带有德语字符串的版本等。如果文件在其 @ 987654321@ 它正在使用的 XSD 语句,看来我应该能够在不进行字符串比较的情况下通过它。
例如我想避免这样做:
xmlNodePtr cur = xmlDocGetRootElement(doc);
if(!xmlStrncmp(cur->name, (const xmlChar *) "settings"))
{
// do things
}
因为字符串“settings”会根据使用的 xsd 文件而改变,它可能是“paramètres”或“einstellungen”等。通常这是使用单独的 stings 文件完成的,但似乎 xsd 具有所有用作该字符串文件所需的信息。
但是,尚不清楚例如,如果 XSD 将元素中的第 n 个属性定义为带有默认值的可选,当我迭代时,libxml2 会告诉我它是第 n 个属性,并给它默认值节点中的属性?
类似地,似乎应该有一种方法可以找出一个元素是 <xs:choice> 中的第 n 个元素或 <xs:enumeration> 中的第 n 个元素,但我终生无法弄清楚如何去做吧。
例如在此枚举中:
<xs:restrict base="xs:string">
<xs:enumeration value="glucose"/>
<xs:enumeration value="fructose"/>
<xs:enumeration value="sucrose"/>
<xs:restrict>
“葡萄糖”将是 0,“果糖”1,“蔗糖”2,依此类推。
有没有合适的方法来做到这一点?
【问题讨论】:
-
即使在您将问题中的元素格式化为代码以便它们出现之后,我仍然无法说出您在问什么。听起来您希望验证消息引用索引而不是组件名称。是这样吗?很难知道。短语 nth attribute 没有意义,因为属性没有顺序,并且 如果文件在其
<schema>语句中说它正在使用哪个 XSD,我似乎应该能够通过它没有进行字符串比较也很难解释。投票结束,因为不清楚您的要求,直到得到更好的解释。