Я пытаюсь создать мыльный WSDL через xerces на С++. Я просто хочу создать XML и поместить его в один файл.
При создании xml я использую приведенный ниже фрагмент кода для создания XML-документа.
pDomDocument = p_DOMImplementation->createDocument("http://schemas.xmlsoap.org/soap/envelope/",
convertStringToXmlCh("soapenv:Envelope"),
0);
Но эта строка выдает исключение во время работы. Исключение: «Поймано исключение dom с сообщением: недопустимый или недопустимый символ XML».
Также мой xml имеет три пространства имен, кроме пространства имен по умолчанию. Как я могу добавить это через xerces.
Но когда я удаляю двоеточие (:) из корневого имени в функции createDocument, поток запускается. Не могли бы вы рассказать мне, как я могу поместить имя пространства имен в XML-документ через xerces.
Я пытался много искать в Google без успеха.
Редактировать 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 = "/users/gen/app/mayank.xml";
SerializeXmlWriter(pDomDocument,path);
return 0;
}
Получение ниже исключения: «Пойманное исключение: недопустимый или недопустимый символ XML»
getDOMImplementation(XMLString::transcode("Core XML")
, чтобы узнать, поддерживает ли это пространства имен. Я не думаю, что толькоCore
поддерживает пространства имен. - person Martin Honnen   schedule 20.03.2016getDOMImplementation(XMLString::transcode("Core 2.0")
— это способ обеспечить поддержку пространств имен, поскольку DOM Level 1.0 не включает поддержку пространств имен. - person Martin Honnen   schedule 20.03.2016DOMDocument* doc = impl->createDocument(X("http://www.w3.org/2000/svg"), X("svg:svg"), 0);
иdoc->getDocumentElement()->appendChild(doc->createElementNS(X("http://www.w3.org/2000/svg"), X("svg:circle")));
, работал нормально. Так и не смог воспроизвести проблему. - person Martin Honnen   schedule 21.03.2016