schemaLocation的libxml2名称空间前缀没有定义
libxml2 namespace prefix for schemaLocation is not defined
几天前我开始学习libxml2,用于在Linux (Ubuntu 14.04)上解析xml文档。但不幸的是,我有很多问题。
首先,当我使用函数xmlParseDoc()
时,我有一个错误消息:
doc.xml:1: namespace error: OAI-PMH上schemaLocation的namespace prefix xsi没有定义。/www.openarchives.org/OAI/2.0/http://www.openarchives.org/OAI/2.0/OAI-PMH.xsd"
第二个错误是当我尝试通过xsd验证xml-document时。但我认为这个错误是第一个问题的结果。这是一个错误消息:
doc.xml:1:元素OAI-PMH:架构有效性错误:元素'OAI-PMH':验证根没有匹配的全局声明。
请大家帮忙解释一下我的错误。
有parseFile()
功能:
bool parseFile(xmlDocPtr& doc, const char* filename) {
doc = xmlParseFile(filename);
if(doc == NULL) {
std::cout << "Document is not parsing successfully: " << filename << std::endl;
return false;
}
xmlNodePtr root = xmlDocGetRootElement(doc);
if(root == NULL) {
std::cout << "Empty document: " << filename << std::endl;
return false;
}
if(xmlStrcmp(root->name, (const xmlChar *)"OAI-PMH")) {
std::cout << "Document of the wrong type, root node != "OAI-PMH"" << std::endl;
return false;
}
return true;
}
有validateDoc()
功能:
void validateDoc(xmlDocPtr doc) {
std::cout << "Start to validate doc funcn";
xmlSchemaParserCtxtPtr schemaParser = xmlSchemaNewParserCtxt("http://www.openarchives.org/OAI/2.0/OAI-PMH.xsd");
xmlSchemaPtr schema = xmlSchemaParse(schemaParser);
xmlSchemaValidCtxtPtr schemaValid = xmlSchemaNewValidCtxt(schema);
int result = xmlSchemaValidateDoc(schemaValid, doc);
std::cout << "Result: " << result << std::endl; // result is equal to 1845!
std::cout << "End validate doc funcn";
}
这是一个xml文档:
<OAI-PMH xsi:schemaLocation="http://www.openarchives.org/OAI/2.0/ http://www.openarchives.org/OAI/2.0/OAI-PMH.xsd>
<responseDate>2014-08-21T22:00:24.551Z</responseDate>
<request verb="Identify"/>
<Identify>
<repositoryName>Musketti KDK Data</repositoryName>
<baseURL>http://www.museot.fi/baseUrl</baseURL>
<protocolVersion>2.0</protocolVersion>
<adminEmail>noreply@museo.fi</adminEmail>
<earliestDatestamp>1900-01-01T00:00:00.000Z</earliestDatestamp>
<deletedRecord>no</deletedRecord>
<granularity>YYYY-MM-DDThh:mm:ssZ</granularity>
<compression>NoCompression</compression>
</Identify>
</OAI-PMH>
您需要在XML中声明xsi
前缀以使其有效:
<OAI-PMH xsi:schemaLocation="http://www.openarchives.org/OAI/2.0/ http://www.openarchives.org/OAI/2.0/OAI-PMH.xsd"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
.....
.....
</OAI-PMH>
相关讨论:xsi:前缀在XML中是已知的吗?
相关文章:
- 在提升multi_index容器中,是否定义了"default index"?
- #定义c-预处理器常量..我做错了什么
- 用C++中的一个变量定义一个常量
- 部分定义/别名模板模板参数
- C++映射:具有自定义类的运算符[]不起作用(总是返回0)
- #为""定义宏;静态";针对不同的上下文
- 如何确保C++函数在定义之前声明(如override关键字)
- 定义宏以将前缀 0x 添加到十六进制字符串文本
- 如何在自定义对象的<<运算符中添加自定义前缀
- 自定义提升前缀/命名空间 - 如何使用
- 宏,用于定义带有添加前缀的新宏
- 重复使用前缀 ++ 运算符时的未定义行为
- 与前缀相关的整数解析在哪里定义?
- C++成员函数定义类前缀快捷方式(也是模板)
- 当使用L前缀(Visual C++编译器)时,如何#定义硬编码字符串
- 在 CPP 文件中使用命名空间作为函数定义的前缀是否是一种好的做法
- schemaLocation的libxml2名称空间前缀没有定义
- 构造函数定义是否可以以 "class" 关键字为前缀?
- 自定义迭代器上的前缀和后缀++做同样的事情
- 自动为自定义例外添加前缀