Xerces c期望命名空间元素

时间:2015-04-08 16:28:59

标签: c++ xml dom xsd-validation xerces-c

我尝试使用xerces-c来解析xml字符串。我已经使用xsd代码合成从xsd生成与字符串对应的cxx和hxx文件。我一直试图让它忽略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>

0 个答案:

没有答案