1

我想将 xml 文件解析为 Xml.Doc 对象,并针对 Vala 中的模式文件对其进行验证。Vala 是否提供此功能?我搜索了http://valadoc.org,但找不到任何东西。

我希望 Vala 中可以使用以下 C 函数:

  1. xmlSchemaParserCtxtPtr parser_ctxt = xmlSchemaNewDocParserCtxt(schema_doc);
  2. xmlSchemaPtr 模式 = xmlSchemaParse(parser_ctxt);
  3. xmlSchemaValidCtxtPtr valid_ctxt = xmlSchemaNewValidCtxt(schema);

我只能找到第三个,valadoc 中提到的 SchemaValidCtxt,但页面几乎是空白的。这是一个有效的可用类吗?

4

1 回答 1

2

我想将 xml 文件解析为 Xml.Doc 对象,并针对 Vala 中的模式文件对其进行验证。Vala 是否提供此功能?我搜索了http://valadoc.org,但找不到任何东西。

如果您在 libxml 中寻找与 C 函数等效的 Vala,您只需搜索libxml-2.0.vapi并查找 cname。Valadoc.org 目前不允许您搜索 C 符号,尽管 AFAIK 计划了该功能。

我希望 Vala 中可以使用以下 C 函数:

  1. xmlSchemaParserCtxtPtr parser_ctxt = xmlSchemaNewDocParserCtxt(schema_doc);
  2. xmlSchemaPtr 模式 = xmlSchemaParse(parser_ctxt);
  3. xmlSchemaValidCtxtPtr valid_ctxt = xmlSchemaNewValidCtxt(schema);

libxml-2.0 Vala 绑定非常不完整,没有人愿意使用它们,因为 C API 非常混乱。通常最终发生的事情是有人出现并需要特定的东西,所以他们添加它并提交补丁。显然,您是第一个需要支持 XML 模式的人。

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,但页面几乎是空白的。这是一个有效的可用类吗?

它现在只是一个空壳——没有任何方法是绑定的。幸运的是,添加绑定非常容易。

于 2013-01-25T00:11:24.920 回答