我有一個使用xerces庫將數據寫入xml文件的C++程序。任何人都可以幫助我使用相同的xerces庫解析(讀取)xml文件中的屬性值嗎?使用xerces讀取xml屬性的值
我得到了下面的程序,據稱爲服務宗旨:
#include <xercesc/sax2/SAX2XMLReader.hpp>
#include <xercesc/sax2/XMLReaderFactory.hpp>
#include <xercesc/sax2/DefaultHandler.hpp>
#include <xercesc/util/XMLString.hpp>
#include <conio.h>
#include <xercesc/parsers/SAXParser.hpp>
#include <xercesc/sax/HandlerBase.hpp>
#include <xercesc/util/XMLString.hpp>
#include <iostream>
#include <xercesc/dom/DOM.hpp>
#include <xercesc/parsers/XercesDOMParser.hpp>
using namespace std;
using namespace xercesc;
class ErnstSax2Handler : public DefaultHandler
{
public:
ErnstSax2Handler(void);
virtual ~ErnstSax2Handler(void);
void startElement(
const XMLCh* const uri,
const XMLCh* const localname,
const XMLCh* const qname,
const Attributes& attrs
);
void endElement(
const XMLCh* const uri,
const XMLCh* const localname,
const XMLCh* const qname
);
void characters(
const XMLCh* const chars,
const XMLSize_t length
);
void fatalError(const SAXParseException&);
protected:
// define variables to save the state
};
void ErnstSax2Handler::startElement(const XMLCh* const uri,
const XMLCh* const localname,
const XMLCh* const qname,
const Attributes& attrs)
{
char* name = XMLString::transcode(localname);
cout<<name;
// ...
XMLString::release(&name);
}
void ErnstSax2Handler::endElement(
const XMLCh* const uri,
const XMLCh* const localname,
const XMLCh* const qname)
{
char* name = XMLString::transcode(localname);
//...
XMLString::release(&name);
}
void ErnstSax2Handler::fatalError(const SAXParseException& exception)
{
char* message = XMLString::transcode(exception.getMessage());
cout << "Fatal Error: " << message
<< " at line: " << exception.getLineNumber()
<< endl;
XMLString::release(&message);
}
void ErnstSax2Handler::characters(
const XMLCh* const chars,
const XMLSize_t length
)
{
// This is called when the parser is reading text.
// You will need to save what state you are in via
// startElement/endElement.
}
int main() {
try {
XMLPlatformUtils::Initialize();
}
catch (const XMLException& toCatch) {
char* message = XMLString::transcode(toCatch.getMessage());
cout << "Error during initialization! :\n";
cout << "Exception message is: \n"
<< message << "\n";
XMLString::release(&message);
return 1;
}
char* xmlFile = "test.xml";
SAX2XMLReader* parser = XMLReaderFactory::createXMLReader();
parser->setFeature(XMLUni::fgSAX2CoreValidation, true);
parser->setFeature(XMLUni::fgSAX2CoreNameSpaces, true); // optional
DefaultHandler* defaultHandler = new DefaultHandler();
xercesc::ContentHandler* h = new DefaultHandler();
parser->setContentHandler(h);
parser->setErrorHandler(defaultHandler);
try {
parser->parse(xmlFile);
}
catch (const XMLException& toCatch) {
char* message = XMLString::transcode(toCatch.getMessage());
cout << "Exception message is: \n"
<< message << "\n";
XMLString::release(&message);
return -1;
}
catch (const SAXParseException& toCatch) {
char* message = XMLString::transcode(toCatch.getMessage());
cout << "Exception message is: \n"
<< message << "\n";
XMLString::release(&message);
return -1;
}
catch (...) {
cout << "Unexpected Exception \n" ;
return -1;
}
//getch();
delete parser;
delete defaultHandler;
return 0;
}
,但最終得到了很多像這樣的錯誤:
錯誤LNK2019:無法解析的外部符號「__declspec(dllimport的) public:static void __cdecl xercesc_3_1 :: XMLString :: release(char * *,class xercesc_3_1 :: MemoryManager * const)「(_ imp?release @ XMLString @ xercesc_3_1 @@ SAXPAPADQAVMemoryManager @ 2 @@ Z) public:virtual void __thiscall ErnstSax2Handler :: startElement(wchar_t const * const,wchar_t const *常量,常量,wchar_t const * const,類xercesc_3_1 ::屬性const &)「(?startElement @ ErnstSax2Handler @@ UAEXQB_W00ABVAttributes @ xercesc_3_1 @@@ Z)XmlRead.obj 錯誤LNK2019:無法解析的外部符號」__declspec(dllimport)public:static void __cdecl xercesc_3_1 :: XMLString :: release(char * *,class xercesc_3_1 :: MemoryManager * const)「函數」public:virtual void「中引用的__cdecl xercesc_3_1 :: XMLString :: release(char * *,class xercesc_3_1 :: MemoryManager * const) __thiscall ErnstSax2Handler :: startElement(wchar_t const * const,wchar_t const * const,wchar_t const * const,class xercesc_3_1 :: Attributes const &)「(?startElement @ ErnstSax2Handler @@ UAEXQB_W00ABVAttributes @ xercesc_3_1 @@@ Z)XmlRead.obj 。
任何人都可以建議我一個不同的程序或上述程序的修復?
可能重複(http://stackoverflow.com/questions/12573816/what-is- [什麼是未定義參考/解析的外部符號錯誤,以及如何解決呢?]一個-未定義參考懸而未決外部的非符號錯誤 - 和 - 如何-DO-I-固定) –