问题描述
不能在 Dtd 中显式声明根元素类型。这是在文档的文档类型声明中完成的,而不是在 DTD 中。
我使用 xmlValidateDtd 函数再次验证内存存储的 DTD 中的 xml 文件,但我不希望检查未明确包含“预设”根元素的文件。
DTD:
<!ELEMENT presets (station)*>
<!ELEMENT station EMPTY>
<!ATTLIST station name CDATA #required frequency CDATA #required>
gboolean
presets_xml_validate_from_resource (xmlDoc *doc,const char *resource)
{
g_autoptr (GBytes) bytes = NULL;
gconstpointer data;
gsize size;
xmlParserInputBufferPtr buf;
xmlValidCtxt ctxt;
xmlDtd *dtd;
gboolean ret;
bytes = g_resources_lookup_data (resource,G_RESOURCE_LOOKUP_FLAGS_NONE,error);
if (bytes == NULL)
{
return FALSE;
}
data = g_bytes_get_data (bytes,&size);
buf = xmlParserInputBufferCreateStatic ((const char *) data,size,XML_CHAR_ENCODING_UTF8);
dtd = xmlIOParseDTD (NULL,buf,XML_CHAR_ENCODING_UTF8);
if (dtd == NULL)
{
return FALSE;
}
memset (&ctxt,sizeof (ctxt));
ret = xmlValidateDtd (&ctxt,doc,dtd);
xmlFreeDtd (dtd);
return ret;
}
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)