Różnice między wybraną wersją a wersją aktualną.
Both sides previous revision Previous revision Next revision | Previous revision Next revision Both sides next revision | ||
xerces_dom [2008/04/15 00:01] kmioduszewski |
xerces_dom [2008/04/15 00:37] kmioduszewski |
||
---|---|---|---|
Linia 139: | Linia 139: | ||
</code> | </code> | ||
+ | |||
+ | |||
+ | |||
+ | |||
Linia 148: | Linia 152: | ||
===== DOMDocument, operacje na dokumencie===== | ===== DOMDocument, operacje na dokumencie===== | ||
- | Gdy dokument zostanie sparsowany bez żadnych błędów możemy swobodnie zacząć na nim pracować wykorzystując zawarte w rekomendacjach metody. Poniżej kod zawierający przykładowe operacje: | + | Gdy dokument zostanie sparsowany bez żadnych błędów możemy swobodnie zacząć na nim pracować wykorzystując zawarte w rekomendacjach metody. Poniżje znajduje się kod przykładowej aplikacji, która wczytuje plik XML, wpisuje jego zawartość na ekran, modyfikuje go, a następnie zapisuje zmiany do pliku.\\ \\ |
+ | Plik XML - ''notes.xml'', który zostanie wczytany: | ||
+ | <code xml> | ||
+ | <?xml version="1.0"?> | ||
+ | <!DOCTYPE notes SYSTEM "note.dtd"> | ||
+ | <notes owner="John Doe"> | ||
+ | |||
+ | <note date="21/02/2008"> | ||
+ | <from>Jani</from> | ||
+ | <heading>Reminder</heading> | ||
+ | <body>Don't forget me this weekend</body> | ||
+ | </note> | ||
+ | <note date="12/04/2008"> | ||
+ | <from>Jeff</from> | ||
+ | <heading>Money</heading> | ||
+ | <body>Gimme my money back!</body> | ||
+ | </note> | ||
+ | </notes> | ||
+ | </code> | ||
+ | DTD - ''notes.dtd'' | ||
+ | <code> | ||
+ | <!ELEMENT notes (note+) > | ||
+ | <!ATTLIST notes owner CDATA #REQUIRED> | ||
+ | <!ELEMENT note (from,heading,body)> | ||
+ | <!ATTLIST note date CDATA #REQUIRED> | ||
+ | <!ELEMENT from (#PCDATA)> | ||
+ | <!ELEMENT heading (#PCDATA)> | ||
+ | <!ELEMENT body (#PCDATA)> | ||
+ | </code> | ||
+ | Klasy pomocnicze: | ||
+ | <code cpp> | ||
+ | #include <xercesc/util/XMLString.hpp> | ||
+ | |||
+ | //klasa pomocnicza przechowujaca nazwy tagów oraz atrybutów w formacie XMLCh* | ||
+ | class TagNames { | ||
+ | public: | ||
+ | XMLCh* TAG_NOTES; | ||
+ | XMLCh* TAG_NOTE; | ||
+ | XMLCh* TAG_FROM; | ||
+ | XMLCh* TAG_HEADING; | ||
+ | XMLCh* TAG_BODY; | ||
+ | |||
+ | XMLCh* ATTR_OWNER; | ||
+ | XMLCh* ATTR_DATE; | ||
+ | |||
+ | TagNames() | ||
+ | : | ||
+ | TAG_NOTES(xercesc::XMLString::transcode("notes")), | ||
+ | TAG_NOTE(xercesc::XMLString::transcode("note")), | ||
+ | TAG_FROM(xercesc::XMLString::transcode("from")), | ||
+ | TAG_HEADING(xercesc::XMLString::transcode("heading")), | ||
+ | TAG_BODY(xercesc::XMLString::transcode("body")), | ||
+ | |||
+ | ATTR_OWNER(xercesc::XMLString::transcode("owner")), | ||
+ | ATTR_DATE(xercesc::XMLString::transcode("date")) | ||
+ | {} | ||
+ | |||
+ | ~TagNames() throw(){ | ||
+ | |||
+ | try{ | ||
+ | xercesc::XMLString::release(&TAG_NOTES); | ||
+ | xercesc::XMLString::release(&TAG_NOTE); | ||
+ | xercesc::XMLString::release(&TAG_FROM); | ||
+ | xercesc::XMLString::release(&TAG_HEADING); | ||
+ | xercesc::XMLString::release(&TAG_BODY); | ||
+ | |||
+ | xercesc::XMLString::release(&ATTR_OWNER); | ||
+ | xercesc::XMLString::release(&ATTR_DATE); | ||
+ | }catch( ... ){ | ||
+ | std::cerr << "TagNames destructor error" << std::endl ; | ||
+ | } | ||
+ | } | ||
+ | } | ||
+ | </code> | ||
<code cpp> | <code cpp> | ||
//... | //... |