// Создать документ hello.xml, состоящий
// из единственного элемента "hello"
TiXmlDocument doc;
TiXmlElement root("hello");
doc.InsertEndChild(root);
doc.SaveFile("hello.xml");
Рецепты 14.3 и 14.4.
14.2. Работа со строками Xerces
Требуется обеспечить надежную и простую работу со строками с расширенным набором символов, используемыми библиотекой Xerces. В частности, необходимо уметь сохранять строки, возвращаемые функциями библиотеки Xerces, а также выполнять преобразования между строками Xerces и строками стандартной библиотеки С++.
Сохранять строки с расширенным набором символов, возвращаемые функциями библиотеки Xerces, можно с помощью шаблона std::basic_string
, специализированного типом с расширенным набором символов XMLCh
библиотеки Xerces.
typedef std::basic_string
Для выполнения преобразований между строками Xerces и строками, состоящими из стандартных символов, используйте перегруженный статический метод transcode()
из класса xercesc::XMLString
, который определен в заголовочном файле
В примере 14.4 определяются две перегруженные вспомогательные функции, toNative
и fromNative
, которые используют transcode
для преобразования строк со стандартными символами в строки Xerces
и transcode
.
#ifndef XERCES_STRINGS_HPP_INCLUDED
#define XERCES_STRINGS_HPP_INCLUDED
#include
#include
#include
typedef std::basic_string
// Преобразует строку со стандартными символами
// в строку с расширенным набором символов
inline XercesString fromNative(const char* str) {
boost::scoped_array
return XercesString(ptr.get());
}
// Преобразует строку со стандартными символами
// в строку с расширенным набором символов.
inline XercesString fromNative(const std::string& str) {
return fromNative(str.c_str());
}
// Преобразует строку с расширенным набором символов
// в строку со стандартными символами.
inline std::string toNative(const XMLCh* str) {
boost::scoped_array
return std::string(ptr.get());
}
// Преобразует строку с расширенным набором символов в строку со стандартными символами.
inline std::string toNative(const XercesString& str) {
return toNative(str.c_str());
}
#endif // #ifndef XERCES_STRINGS_HPP_INCLUDED
Для выполнения преобразований между строками Xerces и std::wstring
просто используйте конструктор std::basic_string
, передавая ему два итератора. Например, можно определить следующие две функции.
// Преобразует строку Xerces в строку std::wstring
std::wstring xercesToWstring(const XercesString& str) {
return std::wstring(str.begin(), str.end());
}
// Преобразует строку std::wstring в строку XercesString
XercesString wstringToXerces(const std::wstring& str) {