在我的应用程序中,我需要针对XSD解析XML文件。 XSD文件将存储针对特定XSD节点的一些元数据,在针对此XSD解析XML文件时,需要在我的应用程序中访问这些元数据。基本上,元数据是允许我将输入XML中的标记值链接到某些特定于应用程序的上下文的信息。例如,我的XSD元数据可能存储标记到数据库表名称的映射等。
我一直在网上搜索如何实现上述目标的例子。我遇到了xsd:appinfo作为在XSD文件中存储元数据的方法,但是在针对此XSD解析XML时,似乎无法访问appinfo(或任何其他XSD标记)。例如,如果我使用Xerces SAX解析器,我理想的是希望在startElement()回调中将appinfo提供给我。但是,我在SAX或DOM解析中没有看到任何方法来实现这一点。
上述要求是否无法实现?
注意:我正在考虑使用C / C ++或Python作为解析器库。
感谢。
答案 0 :(得分:2)
关键是你要使用语法接口......
Xerces2-J实现了XSD语法的XML Schema API。
您可以通过各种方式获得Grammar。什么是最好的将取决于您的需求。阅读FAQ for Caching & Preparsing Grammars。另外,请参阅示例xni.XMLGrammarBuilder以获取有关语法的代码示例。
然后,您可以将语法转换为XSGrammar界面,该界面具有toXSModel()方法,该界面返回XSModel,其中getAnnotations()方法。
答案 1 :(得分:-1)
有些实用程序根据XML Schema为C ++类生成代码。例如,CodeSynthesis,Codalogic,Altova等。使用它们,您将获得一个具有从元数据派生的强类型类的模型。