ΠΠ΅ΡΠΎΠ΄ evaluate() ΠΊΠ»Π°ΡΡΠ° XPathEvaluator Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ XObjectPtr, ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»ΡΡΡΠΈΠΉ ΡΠ΅Π·ΡΠ»ΡΡΠ°Ρ Π²ΡΡΠΈΡΠ»Π΅Π½ΠΈΡ Π²ΡΡΠ°ΠΆΠ΅Π½ΠΈΡ XPath. Π’ΠΈΠΏ Π΄Π°Π½Π½ΡΡ , Π½Π° ΠΊΠΎΡΠΎΡΡΠΉ ΡΡΡΠ»Π°Π΅ΡΡΡ XObjectPtr, ΠΌΠΎΠΆΠ½ΠΎ ΡΠ·Π½Π°ΡΡ ΠΏΡΡΠ΅ΠΌ Π΅Π³ΠΎ ΡΠ°Π·ΡΠΌΠ΅Π½ΠΎΠ²Π°Π½ΠΈΡ Ρ ΠΏΠΎΠ»ΡΡΠ΅Π½ΠΈΠ΅ΠΌ XObject ΠΈ Π²ΡΠ·ΠΎΠ²Π° ΠΌΠ΅ΡΠΎΠ΄Π° getType(); Π·Π°ΡΠ΅ΠΌ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΠ»ΡΡΠΈΡΡ Π΄ΠΎΡΡΡΠΏ ΠΊ Π±Π°Π·ΠΎΠ²ΡΠΌ Π΄Π°Π½Π½ΡΠΌ ΠΏΡΠΈ ΠΏΠΎΠΌΠΎΡΠΈ Π²ΡΠ·ΠΎΠ²Π° num(), boolean(), str() ΠΈΠ»ΠΈ nodeset(). ΠΠΎΡΠΊΠΎΠ»ΡΠΊΡ XPath-Π²ΡΡΠ°ΠΆΠ΅Π½ΠΈΠ΅ Π² ΠΏΡΠΈΠΌΠ΅ΡΠ΅ 14.23 ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»ΡΠ΅Ρ Π½Π°Π±ΠΎΡ ΡΠ·Π»ΠΎΠ², Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π» ΠΌΠ΅ΡΠΎΠ΄ nodeset() Π΄Π»Ρ ΠΏΠΎΠ»ΡΡΠ΅Π½ΠΈΡ ΡΡΡΠ»ΠΊΠΈ Π½Π° NodeRefListBase, ΠΊΠΎΡΠΎΡΡΠΉ ΠΎΠ±Π΅ΡΠΏΠ΅ΡΠΈΠ²Π°Π΅Ρ Π΄ΠΎΡΡΡΠΏ ΠΊ ΡΠ·Π»Π°ΠΌ Π² Π½Π°Π±ΠΎΡΠ΅ Ρ ΠΏΠΎΠΌΠΎΡΡΡ Π΅Π³ΠΎ ΠΌΠ΅ΡΠΎΠ΄ΠΎΠ² getLength() ΠΈ item(). ΠΠ΅ΡΠΎΠ΄ item() Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ ΡΠΊΠ°Π·Π°ΡΠ΅Π»Ρ Π½Π° ΡΠ·Π΅Π» XalanNode, ΠΌΠ΅ΡΠΎΠ΄ getNodeValue() ΠΊΠΎΡΠΎΡΠΎΠ³ΠΎ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ ΡΡΡΠΎΠΊΡ Ρ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΠΎΠΌ, ΠΏΠΎΡ ΠΎΠΆΠΈΠΌ Π½Π° ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡ std::basic_string.
ΠΠΎΡΠΊΠΎΠ»ΡΠΊΡ XPath ΠΎΠ±Π΅ΡΠΏΠ΅ΡΠΈΠ²Π°Π΅Ρ ΠΏΡΠΎΡΡΠΎΠΉ ΡΠΏΠΎΡΠΎΠ± ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΡ ΠΌΠ΅ΡΡΠΎΠΏΠΎΠ»ΠΎΠΆΠ΅Π½ΠΈΡ ΡΠ·Π»ΠΎΠ² Π² Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠ΅ XML, Π²ΠΎΠ·Π½ΠΈΠΊΠ°Π΅Ρ Π΅ΡΡΠ΅ΡΡΠ²Π΅Π½Π½ΡΠΉ Π²ΠΎΠΏΡΠΎΡ ΠΎ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΠΈ ΠΏΡΠΈΠΌΠ΅Π½Π΅Π½ΠΈΡ Π²ΡΡΠ°ΠΆΠ΅Π½ΠΈΠΉ Xalan XPath Π΄Π»Ρ ΠΏΠΎΠ»ΡΡΠ΅Π½ΠΈΡ ΡΠΊΠ·Π΅ΠΌΠΏΠ»ΡΡΠΎΠ² xercesc::DOMNode ΠΈΠ· xercesc::DOMDocument. ΠΠ° ΡΠ°ΠΌΠΎΠΌ Π΄Π΅Π»Π΅ ΡΡΠΎ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, Π½ΠΎ Π½Π΅ ΡΠΎΠ²ΡΠ΅ΠΌ ΡΠ΄ΠΎΠ±Π½ΠΎ, Π° ΠΊΡΠΎΠΌΠ΅ ΡΠΎΠ³ΠΎ, ΠΏΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ ΡΠ·Π»Ρ xercesc::DOMNodes, ΠΏΠΎΠ»ΡΡΠ΅Π½Π½ΡΠ΅ ΡΠ°ΠΊΠΈΠΌ ΡΠΏΠΎΡΠΎΠ±ΠΎΠΌ, ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»ΡΡΡ Π΄Π΅ΡΠ΅Π²ΠΎ Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠ° XML Ρ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡΠΌΠΈ ΡΠΎΠ»ΡΠΊΠΎ ΡΡΠ΅Π½ΠΈΡ, ΡΡΠΎ ΡΠΌΠ΅Π½ΡΡΠ°Π΅Ρ ΠΏΠΎΠ»ΡΠ·Ρ ΠΎΡ ΠΏΡΠΈΠΌΠ΅Π½Π΅Π½ΠΈΡ XPath Π² ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ ΡΡΠ΅Π΄ΡΡΠ²Π° ΠΌΠ°Π½ΠΈΠΏΡΠ»ΠΈΡΠΎΠ²Π°Π½ΠΈΡ DOM. Π‘ΡΡΠ΅ΡΡΠ²ΡΡΡ ΡΠΏΠΎΡΠΎΠ±Ρ, ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡΡΠΈΠ΅ ΠΎΠ±ΠΎΠΉΡΠΈ ΡΡΠΎ ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅Π½ΠΈΠ΅, ΠΎΠ΄Π½Π°ΠΊΠΎ ΠΎΠ½ΠΈ Π΄ΠΎΡΡΠ°ΡΠΎΡΠ½ΠΎ ΡΠ»ΠΎΠΆΠ½Ρ ΠΈ ΠΏΠΎΡΠ΅Π½ΡΠΈΠ°Π»ΡΠ½ΠΎ ΠΎΠΏΠ°ΡΠ½Ρ.
Π ΡΡΠ°ΡΡΡΡ, Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ° Pathan ΡΠ΅Π°Π»ΠΈΠ·ΡΠ΅Ρ XPath, ΡΠΎΠ²ΠΌΠ΅ΡΡΠΈΠΌΡΠΉ Ρ Xerces ΠΈ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡΡΠΈΠΉ Π»Π΅Π³ΠΊΠΎ ΠΌΠ°Π½ΠΈΠΏΡΠ»ΠΈΡΠΎΠ²Π°ΡΡ Xerces DOM. ΠΡΠΈΠΌΠ΅Ρ 14.24 ΠΏΠΎΠΊΠ°Π·ΡΠ²Π°Π΅Ρ, ΠΊΠ°ΠΊ ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ Pathan Π΄Π»Ρ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΡ ΠΌΠ΅ΡΡΠ° ΡΠ°ΡΠΏΠΎΠ»ΠΎΠΆΠ΅Π½ΠΈΡ ΠΈ ΡΠ΄Π°Π»Π΅Π½ΠΈΡ ΡΠ·Π»Π° ΡΠ»ΠΎΠ½Π° Herby ΠΈΠ· Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠ° XML, ΠΏΡΠΈΠ²Π΅Π΄Π΅Π½Π½ΠΎΠ³ΠΎ Π² ΠΏΡΠΈΠΌΠ΅ΡΠ΅ 14.1, Ρ ΠΏΠΎΠΌΠΎΡΡΡ Π²ΡΡΠΈΡΠ»Π΅Π½ΠΈΡ XPath-Π²ΡΡΠ°ΠΆΠ΅Π½ΠΈΡ animalList/animal[child::name='Herby']. Π‘ΡΠ°Π²Π½Π΅Π½ΠΈΠ΅ ΡΡΠΎΠ³ΠΎ ΠΏΡΠΈΠΌΠ΅ΡΠ° Ρ ΠΏΡΠΈΠΌΠ΅ΡΠΎΠΌ 14.10 ΡΡΠ½ΠΎ ΠΏΠΎΠΊΠ°Π·ΡΠ²Π°Π΅Ρ, Π½Π°ΡΠΊΠΎΠ»ΡΠΊΠΎ ΠΌΠΎΡΠ½ΡΠΌ ΡΠ²Π»ΡΠ΅ΡΡΡ ΡΠ·ΡΠΊ XPath.
ΠΡΠΈΠΌΠ΅Ρ 14.24. ΠΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ ΠΌΠ΅ΡΡΠΎΠΏΠΎΠ»ΠΎΠΆΠ΅Π½ΠΈΡ ΡΠ·Π»Π° ΠΈ ΡΠ΄Π°Π»Π΅Π½ΠΈΠ΅ Π΅Π³ΠΎ Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ Pathan
#include <exception>
#include <iostream> // cout
#include <xercesc/dom/DOM.hpp>
#include <xercesc/framework/LocalFileFormatTarget.hpp>
#include <xercesc/util/PlatformUtils.hpp>
#include <pathan/XPathNamespace.hpp>
#include <pathan/XPathResult.hpp>
<include <pathan/XPathEvaluator.hpp>
#include <pathan/XPathExpression.hpp>
#include "xerces_strings.hpp" // ΠΡΠΈΠΌΠ΅Ρ 14.4
using namespace std;
using namespace xercesc;
/*
* ΠΠΏΡΠ΅Π΄Π΅Π»ΠΈΡΡ XercesInitializer, ΠΊΠ°ΠΊ ΡΡΠΎ ΡΠ΄Π΅Π»Π°Π½ΠΎ Π² ΠΏΡΠΈΠΌΠ΅ΡΠ΅ 14.8, Π° ΡΠ°ΠΊΠΆΠ΅
* CircusFrrorHandler ΠΈ DOMPtr, ΠΊΠ°ΠΊ ΡΡΠΎ ΡΠ΄Π΅Π»Π°Π½ΠΎ Π² ΠΏΡΠΈΠΌΠ΅ΡΠ΅ 14.10
*/
int main() {
try {
// ΠΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·ΠΈΡΠΎΠ²Π°ΡΡ Xerces ΠΈ ΠΏΠΎΠ»ΡΡΠΈΡΡ DOMImplementation.
XercesInitializer init;
DOMImplementation* impl =
DOMImplementationRegistry::getDOMImplementation(
fromNative("LS").c_str()
);
if (impl == 0) {
cout << "couldn't create DOM implementation\n";
return EXIT_FAILURE;
}
// Π‘ΠΊΠΎΠ½ΡΡΡΡΠΈΡΠΎΠ²Π°ΡΡ DOMBuilder Π΄Π»Ρ ΡΠΈΠ½ΡΠ°ΠΊΡΠΈΡΠ΅ΡΠΊΠΎΠ³ΠΎ Π°Π½Π°Π»ΠΈΠ·Π°
// Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠ° animals.xml.
DOMPtr<DOMBuilder> parser =
static cast<DOMImplementationLS*>(impl)-> createDOMBuilder(
DOMImplementationLS::MODE_SYNCHRONOUS, 0
);
CircusErrorHandler err;
parser->setErrorHandler(&err);
// ΠΡΠΏΠΎΠ»Π½ΠΈΡΡ ΡΠΈΠ½ΡΠ°ΠΊΡΠΈΡΠ΅ΡΠΊΠΈΠΉ Π°Π½Π°Π»ΠΈΠ·
animals.xml. DOMDocument* doc =
parser->parseURI("animals.xml");
DOMElement* animalList = doc->getDocumentElement();
// Π‘ΠΎΠ·Π΄Π°ΡΡ XPath-Π²ΡΡΠ°ΠΆΠ΅Π½ΠΈΠ΅.
auto_ptr<XPathEvaluator>
evaluator(XPathEvaluator::createEvaluator());
auto_ptr<XPathNSResolver>
resolver(evaluator->createNSResolver(animalList));
auto_ptr<XPathExpression> xpath(
evaluator->createExpression(FromNative(
"animalList/animal[child::name='Herby']" ).c_str(), resolver.get()
)
);
auto_ptr<XPathEvaluator> evaluator(XPathEvaluator::createEvaluator());
auto_ptr<XPathNSResolver> resolver(evaluator->createNSResolver(animalList));
auto_ptr<XPathExpression> xpath(evaluator->createExpression(
fromNative("animalList/animal[child::name='Herby']").c_str(),
resolver.get()
));
// ΠΡΡΠΈΡΠ»ΠΈΡΡ Π²ΡΡΠ°ΠΆΠ΅Π½ΠΈΠ΅.
XPathResult* result = xpath->evaluate(doc,
XPathResult::ORDERED_NODE_ITERATOR_TYPE, 0
);
DOMNode* herby;
if (herby = result->iterateNext()) {
animalList->removeChild(herby);
herby->release(); // optional
}
// Π‘ΠΊΠΎΠ½ΡΡΡΡΠΈΡΠΎΠ²Π°ΡΡ DOMWriter Π΄Π»Ρ ΡΠΎΡ ΡΠ°Π½Π΅Π½ΠΈΡ animals.xml
DOMPtr<DOMWriter> writer =
static_cast<DOMImplementationLS->(impl)->createDOMWriter();
writer->setErrorHandler(&err);
// Π‘ΠΎΡ ΡΠ°Π½ΠΈΡΡ animals.xml.
LocalFileFormatTarget file("circus.xml");
writer->writeNode(&file, *animalList);
} catch (const DOMException& e) {
cout << toNative(e.getMessage()) << "\n";
return EXIT_FAILURE;
} catch (const XPathException &e) {
cout << e.getString() << "\n";
return EXIT_FAILURE;
} catch (const exception& e) {
cout << e.what() << "\n";
return EXIT_FAILURE;
}
}
ΠΡΠΈΠΌΠ΅Ρ 14.24 ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅Ρ Pathan 1, ΠΊΠΎΡΠΎΡΡΠΉ ΡΠ΅Π°Π»ΠΈΠ·ΡΠ΅Ρ ΡΠ΅ΠΊΠΎΠΌΠ΅Π½Π΄Π°ΡΠΈΠΈ XPath 1.0; Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΎΠΉ Xalan Π² Π½Π°ΡΡΠΎΡΡΠ΅Π΅ Π²ΡΠ΅ΠΌΡ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°Π΅ΡΡΡ ΠΈΠΌΠ΅Π½Π½ΠΎ ΡΡΠ° Π²Π΅ΡΡΠΈΡ. Pathan 2, ΠΊΠΎΡΠΎΡΡΠΉ Π² Π½Π°ΡΡΠΎΡΡΠ΅Π΅ Π²ΡΠ΅ΠΌΡ Π΄ΠΎΡΡΡΠΏΠ΅Π½ Π² Π±Π΅ΡΠ°-Π²Π΅ΡΡΠΈΠΈ, ΠΎΠ±Π΅ΡΠΏΠ΅ΡΠΈΠ²Π°Π΅Ρ ΠΏΡΠ΅Π΄Π²Π°ΡΠΈΡΠ΅Π»ΡΠ½ΡΡ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΡ ΡΠ΅ΠΊΠΎΠΌΠ΅Π½Π΄Π°ΡΠΈΠΉ XPath 2.0. Pathan 2 ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»ΡΠ΅Ρ ΡΠΎΠ±ΠΎΠΉ Π±ΠΎΠ»Π΅Π΅ ΡΠΎΡΠ½ΡΡ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΡ ΡΡΠ°Π½Π΄Π°ΡΡΠ° XPath; Ρ ΡΠ΅ΠΊΠΎΠΌΠ΅Π½Π΄ΡΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ Pathan 2 Π²ΠΌΠ΅ΡΡΠΎ Pathan 1, ΠΊΠ°ΠΊ ΡΠΎΠ»ΡΠΊΠΎ ΡΡΠ°Π½Π΅Ρ Π΄ΠΎΡΡΡΠΏΠ½Π° Π½Π΅ Π±Π΅ΡΠ°-Π²Π΅ΡΡΠΈΡ.
Π‘ΠΌΠΎΡΡΠΈ ΡΠ°ΠΊΠΆΠ΅Π Π΅ΡΠ΅ΠΏΡ 14.7.
14.9. ΠΡΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ XML Π΄Π»Ρ ΡΠΎΡ ΡΠ°Π½Π΅Π½ΠΈΡ ΠΈ Π²ΠΎΡΡΡΠ°Π½ΠΎΠ²Π»Π΅Π½ΠΈΡ Π½Π°Π±ΠΎΡΠ° ΠΎΠ±ΡΠ΅ΠΊΡΠΎΠ²
Π’ΡΠ΅Π±ΡΠ΅ΡΡΡ ΠΈΠΌΠ΅ΡΡ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡ ΡΠΎΡ ΡΠ°Π½Π΅Π½ΠΈΡ Π½Π°Π±ΠΎΡΠ° ΠΎΠ±ΡΠ΅ΠΊΡΠΎΠ² C++ Π² Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠ΅ XML ΠΈ ΡΡΠΈΡΡΠ²Π°Π½ΠΈΡ ΠΈΡ ΠΏΠΎΡΠΎΠΌ ΠΎΠ±ΡΠ°ΡΠ½ΠΎ Π² ΠΏΠ°ΠΌΡΡΡ.
Π Π΅ΡΠ΅Π½ΠΈΠ΅ΠΡΠΏΠΎΠ»ΡΠ·ΡΠΉΡΠ΅ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΡ Boost Serialization. ΠΡΠ° Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ° ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ ΡΠΎΡ ΡΠ°Π½ΡΡΡ ΠΈ Π²ΠΎΡΡΡΠ°Π½Π°Π²Π»ΠΈΠ²Π°ΡΡ ΠΎΠ±ΡΠ΅ΠΊΡΡ, ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡ ΠΊΠ»Π°ΡΡΡ, Π½Π°Π·ΡΠ²Π°Π΅ΠΌΡΠ΅ Π°ΡΡ ΠΈΠ²Π°ΠΌΠΈ. ΠΠ»Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ ΡΡΠΎΠΉ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ Π²Ρ Π΄ΠΎΠ»ΠΆΠ½Ρ ΡΠ½Π°ΡΠ°Π»Π° ΡΠ΄Π΅Π»Π°ΡΡ ΠΊΠ°ΠΆΠ΄ΡΠΉ ΠΈΠ· Π²Π°ΡΠΈΡ ΠΊΠ»Π°ΡΡΠΎΠ² ΡΠ΅ΡΠΈΠ°Π»ΠΈΠ·ΡΠ΅ΠΌΡΠΌ (serializable), ΡΡΠΎ ΠΏΡΠΎΡΡΠΎ ΠΎΠ·Π½Π°ΡΠ°Π΅Ρ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡ Π·Π°ΠΏΠΈΡΠΈ ΡΠΊΠ·Π΅ΠΌΠΏΠ»ΡΡΠΎΠ² ΠΊΠ»Π°ΡΡΠ° Π² Π°ΡΡ ΠΈΠ² (ΡΡΠΎ Π½Π°Π·ΡΠ²Π°Π΅ΡΡΡ ΡΠ΅ΡΠΈΠ°Π»ΠΈΠ·Π°ΡΠΈΠ΅ΠΉ) ΠΈ ΠΈΡ ΠΎΠ±ΡΠ°ΡΠ½ΠΎΠ³ΠΎ ΡΡΠΈΡΡΠ²Π°Π½ΠΈΡ Π² ΠΏΠ°ΠΌΡΡΡ (ΡΡΠΎ Π½Π°Π·ΡΠ²Π°Π΅ΡΡΡ Π΄Π΅ΡΠ΅ΡΠΈΠ°Π»ΠΈΠ·Π°ΡΠΈΠ΅ΠΉ). ΠΠ°ΡΠ΅ΠΌ Π½Π° ΡΡΠ°ΠΏΠ΅ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ Π²Ρ ΠΌΠΎΠΆΠ΅ΡΠ΅ ΡΠΎΡ ΡΠ°Π½ΠΈΡΡ Π²Π°ΡΠΈ ΠΎΠ±ΡΠ΅ΠΊΡΡ Π² Π°ΡΡ ΠΈΠ²Π΅ XML, ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡ ΠΎΠΏΠ΅ΡΠ°ΡΠΎΡ <<, ΠΈ Π²ΠΎΡΡΡΠ°Π½ΠΎΠ²ΠΈΡΡ ΠΈΡ , ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡ ΠΎΠΏΠ΅ΡΠ°ΡΠΎΡ >>.
Π§ΡΠΎΠ±Ρ ΡΠ΄Π΅Π»Π°ΡΡ ΠΊΠ»Π°ΡΡ ΡΠ΅ΡΠΈΠ°Π»ΠΈΠ·ΡΠ΅ΠΌΡΠΌ, Π΄ΠΎΠ±Π°Π²ΡΡΠ΅ ΡΠ°Π±Π»ΠΎΠ½ ΡΡΠ½ΠΊΡΠΈΠΈ-ΡΠ»Π΅Π½Π° serialize ΡΠΎ ΡΠ»Π΅Π΄ΡΡΡΠ΅ΠΉ ΡΠΈΠ³Π½Π°ΡΡΡΠΎΠΉ.
template<typename Archive>
void serialize(Archive& ar, const unsigned int version);
Π ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΠΈ serialize Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎ ΠΎΠ±Π΅ΡΠΏΠ΅ΡΠΈΡΡ Π·Π°ΠΏΠΈΡΡ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ Π΄Π°Π½Π½ΠΎΠ³ΠΎ-ΡΠ»Π΅Π½Π° ΠΊΠ»Π°ΡΡΠ° Π² ΡΠΊΠ°Π·Π°Π½Π½ΡΠΉ Π°ΡΡ ΠΈΠ² Π² Π²ΠΈΠ΄Π΅ ΠΏΠ°ΡΡ Β«ΠΈΠΌΡ-Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅Β», ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡ ΠΎΠΏΠ΅ΡΠ°ΡΠΎΡ &. ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, Π΅ΡΠ»ΠΈ Π²Ρ Ρ ΠΎΡΠΈΡΠ΅ ΡΠ΅ΡΠΈΠ°Π»ΠΈΠ·ΠΎΠ²Π°ΡΡ ΠΈ Π΄Π΅ΡΠ΅ΡΠΈΠ°Π»ΠΈΠ·ΠΎΠ²Π°ΡΡ ΡΠΊΠ·Π΅ΠΌΠΏΠ»ΡΡΡ ΠΊΠ»Π°ΡΡΠ° Contact ΠΈΠ· ΠΏΡΠΈΠΌΠ΅ΡΠ° 14.2, Π΄ΠΎΠ±Π°Π²ΡΡΠ΅ ΡΡΠ½ΠΊΡΠΈΡ-ΡΠ»Π΅Π½ serialize, ΠΊΠ°ΠΊ ΡΡΠΎ ΡΠ΄Π΅Π»Π°Π½ΠΎ Π² ΠΏΡΠΈΠΌΠ΅ΡΠ΅ 14.25.
ΠΡΠΈΠΌΠ΅Ρ 14.25. ΠΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠ΅ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΊΠΈ ΡΠ΅ΡΠΈΠ°Π»ΠΈΠ·Π°ΡΠΈΠΈ Π² ΠΊΠ»Π°ΡΡ Contact ΠΈΠ· ΠΏΡΠΈΠΌΠ΅ΡΠ° 14.2
#include <boost/serialization/nvp.hpp> // ΠΏΠ°ΡΠ° "ΠΈΠΌΡ-Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅"
class Contact {
...
private:
friend class boost::serialization::access;
template<typename Archive>
void serialize(Archive& ar, const unsigned int version) {
// ΠΠ°ΠΏΠΈΡΠ°ΡΡ (ΠΈΠ»ΠΈ ΡΡΠΈΡΠ°ΡΡ) ΠΊΠ°ΠΆΠ΄ΠΎΠ΅ Π΄Π°Π½Π½ΠΎΠ΅-ΡΠ»Π΅Π½ Π² Π²ΠΈΠ΄Π΅ ΠΏΠ°ΡΡ ΠΈΠΌΡ-Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅
using boost::serialization::make_nvp;
ar & make_nvp("name", name_);
ar & make_nvp("phone", phone_);
}
...
};
ΠΠ½Π°Π»ΠΎΠ³ΠΈΡΠ½ΠΎ ΠΌΠΎΠΆΠ½ΠΎ ΠΎΠ±Π΅ΡΠΏΠ΅ΡΠΈΡΡ ΡΠ΅ΡΠΈΠ°Π»ΠΈΠ·Π°ΡΠΈΡ ΠΊΠ»Π°ΡΡΠ° Animal ΠΈΠ· ΠΏΡΠΈΠΌΠ΅ΡΠ° 14.2, ΠΊΠ°ΠΊ ΡΡΠΎ ΡΠ΄Π΅Π»Π°Π½ΠΎ Π² ΠΏΡΠΈΠΌΠ΅ΡΠ΅ 14.26.
ΠΡΠΈΠΌΠ΅Ρ 14.26. ΠΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠ΅ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΊΠΈ ΡΠ΅ΡΠΈΠ°Π»ΠΈΠ·Π°ΡΠΈΠΈ Π΄Π»Ρ ΠΊΠ»Π°ΡΡΠ° Animal ΠΈΠ· ΠΏΡΠΈΠΌΠ΅ΡΠ° 14.2
...
// ΠΠΊΠ»ΡΡΠΈΡΡ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΊΡ ΡΠ΅ΡΠΈΠ°Π»ΠΈΠ·Π°ΡΠΈΠΈ Π΄Π»Ρ boost::gregorian::date
#include <boost/date_time/gregorian/greg_serialize.hpp>
...
class Contact {
...
private:
friend class boost::serialization::access;
template<typename Archive>
void serialize(Archive& ar, const unsigned int version) {
// ΠΠ°ΠΏΠΈΡΠ°ΡΡ (ΠΈΠ»ΠΈ ΡΡΠΈΡΠ°ΡΡ) ΠΊΠ°ΠΆΠ΄ΠΎΠ΅ Π΄Π°Π½Π½ΠΎΠ΅-ΡΠ»Π΅Π½ Π² Π²ΠΈΠ΄Π΅ ΠΏΠ°ΡΡ ΠΈΠΌΡ-Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅
using boost::serialization::make_nvp;
ar & make_nvp("name", name_);
ar & make_nvp("species", species_);
ar & make_nvp("dateOfBirth", dob_);
ar & make_nvp("veterinarian", vet_);
ar & make_nvp("trainer", trainer_);
}
...
};
Π’Π΅ΠΏΠ΅ΡΡ Π²Ρ ΠΌΠΎΠΆΠ΅ΡΠ΅ ΡΠ΅ΡΠΈΠ°Π»ΠΈΠ·ΠΎΠ²Π°ΡΡ Animal, ΡΠΎΠ·Π΄Π°Π²Π°Ρ Π°ΡΡ ΠΈΠ² XML ΡΠΈΠΏΠ° boost::archive::xml_oarchive ΠΈ Π·Π°ΠΏΠΈΡΡΠ²Π°Ρ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ ΠΎ ΠΆΠΈΠ²ΠΎΡΠ½ΠΎΠΌ Π² Π°ΡΡ ΠΈΠ², ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡ ΠΎΠΏΠ΅ΡΠ°ΡΠΎΡ <<. ΠΠΎΠ½ΡΡΡΡΠΊΡΠΎΡ xml_oarchive Π² ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠ° ΠΏΡΠΈΠ½ΠΈΠΌΠ°Π΅Ρ std::ostream; ΡΠ°ΡΡΠΎ ΡΡΠΈΠΌ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠΎΠΌ Π±ΡΠ΄Π΅Ρ ΠΏΠΎΡΠΎΠΊ Π²ΡΠ²ΠΎΠ΄Π°, ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΠΌΡΠΉ Π΄Π»Ρ Π·Π°ΠΏΠΈΡΠΈ Π² ΡΠ°ΠΉΠ», ΠΎΠ΄Π½Π°ΠΊΠΎ Π² ΠΎΠ±ΡΠ΅ΠΌ ΡΠ»ΡΡΠ°Π΅ Π΄Π»Ρ Π·Π°ΠΏΠΈΡΠΈ Π΄Π°Π½Π½ΡΡ ΠΌΠΎΠΆΠ΅Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡΡΡ ΡΠ΅ΡΡΡΡ Π»ΡΠ±ΠΎΠ³ΠΎ ΡΠΈΠΏΠ°. ΠΠΎΡΠ»Π΅ ΡΠ΅ΡΠΈΠ°Π»ΠΈΠ·Π°ΡΠΈΠΈ ΡΠΊΠ·Π΅ΠΌΠΏΠ»ΡΡΠ° Animal Π΅Π³ΠΎ ΠΌΠΎΠΆΠ½ΠΎ ΡΡΠΈΡΠ°ΡΡ ΠΎΠ±ΡΠ°ΡΠ½ΠΎ Π² ΠΏΠ°ΠΌΡΡΡ, ΠΊΠΎΠ½ΡΡΡΡΠΈΡΡΡ Π°ΡΡ ΠΈΠ² XML ΡΠΈΠΏΠ° boost::archive::xml_iarchive, ΠΏΠΎΠ΄ΠΊΠ»ΡΡΠ°Ρ Π΅Π³ΠΎ ΠΊ ΡΠΎΠΌΡ ΠΆΠ΅ ΡΠ°ΠΌΠΎΠΌΡ ΡΠ΅ΡΡΡΡΡ, ΠΊΠΎΡΠΎΡΡΠΉ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π»ΡΡ ΠΏΠ΅ΡΠ²ΡΠΌ Π°ΡΡ ΠΈΠ²ΠΎΠΌ, ΠΈ ΠΏΡΠΈΠΌΠ΅Π½ΡΡ ΠΎΠΏΠ΅ΡΠ°ΡΠΎΡ >>.