Ik heb nu een document geserialized naar een string, iets wat op zich niet zo moeilijk is.
Nu wil ik vanuit deze string terug een DomDocument parsen, dit geeft echter enkele pronlemen, als ik het bekomen document dan terug serialize en uitprint zitten er schijnbaar gn elementen meer in.
de output van het programma is als volgt
Iemand enig idee waar het misloopt?
Nu wil ik vanuit deze string terug een DomDocument parsen, dit geeft echter enkele pronlemen, als ik het bekomen document dan terug serialize en uitprint zitten er schijnbaar gn elementen meer in.
C++:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
| int main(int argC, char* argV[]) { // Initialize the XML4C2 system. try { XMLPlatformUtils::Initialize(); } catch(const XMLException& toCatch) { char *pMsg = XMLString::transcode(toCatch.getMessage()); cerr << "Error during Xerces-c Initialization.\n" << " Exception message:" << pMsg; XMLString::release(&pMsg); return 1; } { DOMImplementation* impl = DOMImplementationRegistry::getDOMImplementation(X("Core")); DOMDocument* doc = impl->createDocument( 0, // root element namespace URI. X("company"), // root element name 0); // document type object (DTD). DOMElement* rootElem = doc->getDocumentElement(); DOMElement* prodElem = doc->createElement(X("product")); rootElem->appendChild(prodElem); DOMText* prodDataVal = doc->createTextNode(X("Xerces-C")); prodElem->appendChild(prodDataVal); DOMElement* catElem = doc->createElement(X("category")); rootElem->appendChild(catElem); catElem->setAttribute(X("idea"), X("great")); DOMText* catDataVal = doc->createTextNode(X("XML Parsing Tools")); catElem->appendChild(catDataVal); DOMElement* devByElem = doc->createElement(X("developedBy")); rootElem->appendChild(devByElem); DOMText* devByDataVal = doc->createTextNode(X("Apache Software Foundation")); devByElem->appendChild(devByDataVal); const DOMNode * nd = doc; unsigned int elementCount = doc->getElementsByTagName(X("*"))->getLength(); cout << "The tree just created contains: " << elementCount << " elements." << endl; DOMWriter *theSerializer = ((DOMImplementationLS*)impl)->createDOMWriter(); XMLCh* serializedstring = theSerializer->writeToString(*nd); cout<<StrXX(serializedstring)<<endl; const char* testarray=(StrXX(serializedstring)).localForm(); InputSource* is = new MemBufInputSource (( XMLByte*)testarray, strlen(testarray), "bufid"); XercesDOMParser *parser = new XercesDOMParser; const DOMDocument * doccie; try { parser->parse(*is); doccie = parser->adoptDocument(); } catch (const XMLException& e) { cerr << "An error occurred during parsing\n Message: " << StrXX(e.getMessage()) << endl; } //cout<<parser->getErrorCount () ; cout<<"-----------------------------------"<<endl; XMLCh* serializedstringB = theSerializer->writeToString(*doccie); cout<<StrXX(serializedstringB); } XMLPlatformUtils::Terminate(); return 0; } |
de output van het programma is als volgt
code:
1
2
3
4
5
6
7
8
9
| The tree just created contains: 4 elements. <?xml version="1.0" encoding="UTF-16" standalone="no" ?> <company> <product>Xerces-C</product> <category idea="great">XML Parsing Tools</category> <developedBy>Apache Software Foundation</developedBy> </company> ----------------------------------- <?xml version="1.0" encoding="UTF-16" standalone="no" ?> |
Iemand enig idee waar het misloopt?