Я пытаюсь создать мыло WSDL через xerces в C++. Я просто хочу создать XML и поместить его в один файл.Ошибка Xerces-C при вводе двоеточия в корневое имя
При создании XML я использую ниже фрагмент кода для создания XML-документа
pDomDocument = p_DOMImplementation->createDocument("http://schemas.xmlsoap.org/soap/envelope/",
convertStringToXmlCh("soapenv:Envelope"),
0);
Но эта линия бросает исключение во время работы .Exception является: «Caught дом исключение с сообщением: недействительным или незаконным XML символ».
Также мой xml имеет три пространства имен, кроме пространства имен по умолчанию. Как добавить это через xerces.
Но время, когда я удаляю двоеточие (:) от корневого имени в функции createDocument, запускается поток. Не могли бы вы рассказать мне, как я могу поместить имя пространства имен в документ xml через xerces.
Я пробовал много искать в Google без успеха.
Edit 1:
DOMImplementation* p_DOMImplementation = NULL;
p_DOMImplementation = DOMImplementationRegistry::getDOMImplementation(XMLString::transcode("core"));
DOMDocument* pDomDocument=NULL;
try
{
pDomDocument = p_DOMImplementation->createDocument(convertStringToXmlCh(uri), //Root element namespace URI
convertStringToXmlCh(rootNode), // Root element name
0); //Document type (DTD)
}
catch(DOMException& e)
{
BL_LOG_MSG(BL_FATAL,"Caught dom exception with message :<1>",XMLString::transcode(e.getMessage()))
return NULL;
}
редактировать 2:
Ниже мой точный код все еще получаю исключение:
int main()
{
DOMImplementation* p_DOMImplementation = NULL;
XMLPlatformUtils::Initialize();
p_DOMImplementation = DOMImplementationRegistry::getDOMImplementation(convertStringToXmlCh("Core"));
DOMDocument* pDomDocument=NULL;
try
{
pDomDocument = p_DOMImplementation->createDocument(convertStringToXmlCh("http://schemas.xmlsoap.org/soap/envelope/"), //Root element namespace URI
convertStringToXmlCh("soapenv:envelope"), // Root element name
NULL); //Document type (DTD)
}
catch(DOMException& e)
{
cout <<"Caught xception:"<<e.getMessage();
return NULL;
}
catch(...)
{
cout <<"Caught xception:";
return NULL;
}
if(pDomDocument == NULL)
{
return NULL;
cout<<"NULL returned";
}
DOMElement* pRootElement = pDomDocument->getDocumentElement();
addAttributeToDomElementNS(pRootElement,"xmlns:typ","http://abcd.fg/V1/types");
char* path = "https://stackoverflow.com/users/gen/app/mayank.xml";
SerializeXmlWriter(pDomDocument,path);
return 0;
}
Получение ниже исключения: «Caught xception: недействительным или незаконным XML характер "
Возможно, по умолчанию реализация не является пространством имен. Как вы создаете реализацию? –
Попробуйте 'getDOMImplementation (XMLString :: transcode (« Core XML »)', чтобы увидеть, поддерживают ли эти пространства имен. Я не думаю, что 'Core' поддерживает имена пространств имен. –
Или, возможно,' getDOMImplementation (XMLString :: transcode ("Core 2.0") 'является способом обеспечения пространства имен, поскольку DOM Level 1.0 не включает поддержку пространства имен. –