如何解决验证xml中根元素的方法
不能在 Dtd 中显式声明根元素类型。这是在文档的文档类型声明中完成的,而不是在 DTD 中。
我使用 xmlValidateDtd 函数再次验证内存存储的 DTD 中的 xml 文件,但我不希望检查未明确包含“预设”根元素的文件。
DTD:
<!ELEMENT presets (station)*>
<!ELEMENT station EMPTY>
<!ATTLIST station name CDATA #REQUIRED frequency CDATA #REQUIRED>
检查xml文件的代码:
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 举报,一经查实,本站将立刻删除。