我想将xml文件解析为Xml.Doc对象,并根据Vala中的模式文件对其进行验证。 Vala是否提供此功能?我搜索了http://valadoc.org,但找不到任何东西。
我希望在Vala中可以使用以下C函数:
我只能找到valadoc中提到的第三个SchemaValidCtxt,但页面实际上是空白的。这是一个有效的可用类吗?
答案 0 :(得分:2)
我想将xml文件解析为Xml.Doc对象,并根据Vala中的模式文件对其进行验证。 Vala是否提供此功能?我搜索了http://valadoc.org,但找不到任何东西。
如果您正在寻找libxml中C函数的Vala等价物,您只需搜索libxml-2.0.vapi并查找cname即可。 Valadoc.org目前不允许您搜索C符号,但AFAIK计划使用该功能。
我希望在Vala中可以使用以下C函数:
- xmlSchemaParserCtxtPtr parser_ctxt = xmlSchemaNewDocParserCtxt(schema_doc);
- xmlSchemaPtr schema = xmlSchemaParse(parser_ctxt);
- xmlSchemaValidCtxtPtr valid_ctxt = xmlSchemaNewValidCtxt(schema);
醇>
libxml-2.0 Vala绑定非常不完整,没有人愿意使用它们,因为C API非常混乱。通常最终发生的事情是有人出现并需要特定的东西,所以他们添加它并提交补丁。显然,你是第一个需要XML Schema支持的人。
xmlSchemaNewDocParserCtxt绑定为Xml.ParserCtxt.ParserCtxt.create_doc。其他两个函数目前尚未绑定,但绑定它们并不是很困难。将这样的(完全未经测试的)添加到libxml-2.0 VAPI应该可以解决这个问题:
[Compact]
[CCode (cname = "xmlSchema", free_function = "xmlSchemaFree", cheader_filename = "libxml/xmlschemas.h")]
public class Schema {
[CCode (cname = "xmlSchemaDump", instance_pos = -1)]
public void dump (GLib.FileStream output);
}
[Compact]
[CCode (cname = "xmlSchemaParserCtxt", free_function = "xmlSchemaFreeParserCtxt", cheader_filename = "libxml/xmlschemas.h")]
public class SchemaParserCtxt {
[CCode (cname = "xmlSchemaNewParserCtxt")]
public SchemaParserCtxt (string URL);
[CCode (cname = "xmlSchemaNewDocParserCtxt")]
public SchemaParserCtxt.from_doc (Xml.Doc doc);
[CCode (cname = "xmlSchemaNewMemParserCtxt")]
public SchemaParserCtxt.from_buffer (uint8[] buffer);
[CCode (cname = "xmlSchemaParse")]
public Xml.Schema parse ();
}
[Compact]
[CCode (cname = "xmlSchemaValidCtxt", free_function = "xmlSchemaFreeValidCtxt", cheader_filename = "libxml/xmlschemas.h")]
public class SchemaValidCtxt {
public SchemaValidCtxt (Xml.Schema schema);
}
我只能找到valadoc中提到的第三个SchemaValidCtxt,但页面实际上是空白的。这是一个有效的可用类吗?
现在它只是一个空壳 - 没有绑定任何方法。幸运的是,添加绑定非常简单。