Я пытаюсь использовать xerces-c для анализа строки XML. Я использовал синтез кода xsd для генерации файлов cxx и hxx из xsd, соответствующего строке. Я пытался заставить его игнорировать пространство имен, связанное с xsd. В строке я получаю, что все элементы имеют пространство имен перед ними: filtermessage: filterMessage. Я также попытался отправить строку XML без пространства имен в нем. т.е. просто filterMessage. В любом случае я получаю эту ошибку: DOM-анализ исключения, исключение: ожидаемый элемент ‘filtermessage # msgSystem’. Я также попробовал:
auto_ptr<filterMessage> table(filterMessage_(*xmlDoc));
что дает мне ту же ошибку.
Команда DOMNodeList * getchildren не имеет проблем. Кто-нибудь знает, как я мог заставить xerces-c игнорировать пространство имен? (Я успешно получил xerces-c, чтобы разобрать это сообщение, но это потребовало от меня вывезти пространство имен из xsd для поиска)
XercesDOMParser* parser = new XercesDOMParser();
parser->setDoNamespaces(false);
parser->setDoSchema(false);
parser->setValidationScheme(XercesDOMParser::Val_Never);
parser->parse(xmlBuf);
DOMDocument *xmlDoc;
xmlDoc = parser->getDocument();
if(!xmlDoc)
{
cout << "Failed to parse" << endl;
return;
}
DOMElement* elementRoot = xmlDoc->getDocumentElement();
if( !elementRoot )
{
cout << "empty xml doc" << endl;
fflush(stdout);
}
else
{
DOMNodeList* children = elementRoot->getChildNodes();
cout << __FILE__ << " " << __LINE__ << endl;
fflush(stdout);
filterMessage msg(*elementRoot, xml_schema::flags::dont_validate);
cout << __FILE__ << " " << __LINE__ << endl;
fflush(stdout);
}
выход:
Filter.cpp 119
DOM Exception parsing, exception: expected element 'filtermessage#msgSystem'
это начало строки:
< filtermessage:filterMessage xmlns:filtermapping="filtermapping" xmlns:filtermessage="filtermessage">
< filtermessage:msgSystem>
Задача ещё не решена.