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/14 22:17] kmioduszewski |
xerces_dom [2008/04/15 00:09] kmioduszewski |
||
---|---|---|---|
Linia 1: | Linia 1: | ||
====== biblioteka dla XML: Xerces (DOM) ===== | ====== biblioteka dla XML: Xerces (DOM) ===== | ||
+ | **Autor:** //[[kmioduszewski@polibuda.info|Krzysztof Mioduszewski]] 2008/04/14 23:59//\\ \\ | ||
Xerces-C++ DOM jest częścią Xerces-C++ API zaprojektowanego do współpracy z plikami w formacie XML. API umożliwia parsowania, manipulowanie, walidowanie oraz generowanie poprawnych dokumentów. | Xerces-C++ DOM jest częścią Xerces-C++ API zaprojektowanego do współpracy z plikami w formacie XML. API umożliwia parsowania, manipulowanie, walidowanie oraz generowanie poprawnych dokumentów. | ||
- | \\ | + | \\ \\ |
Biblioteka DOM jest implementacją następujących rekomendacji W3C: | Biblioteka DOM jest implementacją następujących rekomendacji W3C: | ||
* [[http://www.w3.org/TR/1998/REC-DOM-Level-1-19981001/|Document Object Model (DOM) Level 1 Specification]] | * [[http://www.w3.org/TR/1998/REC-DOM-Level-1-19981001/|Document Object Model (DOM) Level 1 Specification]] | ||
Linia 67: | Linia 68: | ||
} | } | ||
</code> | </code> | ||
+ | |||
Linia 99: | Linia 101: | ||
} | } | ||
+ | //sprawdzamy czy nie wystąpiły błędy podczas parsowania | ||
if(parser->getErrorCount()==0) { | if(parser->getErrorCount()==0) { | ||
xercesc::DOMDocument* XMLdoc = parser->getDocument(); | xercesc::DOMDocument* XMLdoc = parser->getDocument(); | ||
Linia 136: | Linia 139: | ||
</code> | </code> | ||
+ | |||
+ | |||
+ | |||
+ | |||
+ | |||
+ | |||
Linia 141: | Linia 150: | ||
===== 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 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> | ||
+ | \\ \\ | ||
<code cpp> | <code cpp> | ||
//... | //... | ||
- | if(parser->getErrorCount()==0) | + | |
- | try { | + | xercesc::DOMDocument* XMLdoc = parser->getDocument(); |
- | xercesc::DOMDocument* XMLdoc = parser->getDocument(); | + | xercesc::DOMElement* root = XMLdoc->getDocumentElement(); |
+ | |||
+ | //pobieramy nazwę elementu głównego | ||
+ | char* rootName = XMLString::transcode(root->getLocalName()); | ||
+ | |||
+ | if(root->hasAttributes()) { | ||
+ | xercesc::DOMNamedNodeMap* attrMap = root->getAttributes(); | ||
+ | //iterujemy sobie po atrybutach | ||
+ | for( XMLSize_t i = 0 ; i < attrMap->getLength() ; ++i ) { | ||
+ | DOMAttr* attr = dynamic_cast<DOMAttr*>(attrMap->item(ix)); | ||
+ | //wykorzystujemy sobie atrybut | ||
+ | attr->getName(); //tutaj mamy nazwe | ||
+ | attr->getValue(); //wartosc | ||
+ | //... | ||
+ | } | ||
+ | } | ||
+ | |||
+ | |||
+ | |||
</code> | </code> |