Poco::DOMParser и wstring

Есть ли способ заставитьPoco::DOMParser работать с std::wstring?

Я создаю библиотеку pocoXML с определенными XML_UNICODE и XML_UNICODE_WCHAR_T. Теперь я пытаюсь скомпилировать такой код:

Poco::XML::DOMParser parser;
std::wstring xml = getXml(); //Init string with xml document

// Cannot compile, cause parseString wants only std::string
// not wstring
Poco::AutoPtr<Poco::XML::Document> document = parser.parseString(xml); 

Poco::XML::SaxParser может анализировать std::wstring, а Poco::XML::DOMParser использовать SAXParser для создания документа. Поэтому я понятия не имею, почему я не могу передать std::wstring в parseString.

Может быть, я не могу использовать parseString, но есть другой способ разобрать std::wstring с помощью DOMParser?


person user3555886    schedule 03.06.2014    source источник


Ответы (1)


Вы должны иметь возможность использовать std::wstring в Windows только с определенным XML_UNICODE_WCHAR_T. На платформах POSIX вам нужно убедиться, что wchar_t имеет ширину 2 байта (проверьте определение __SIZEOF_WCHAR_T__). Хорошей практикой является использование XMLString, который соответствующим образом определен из std::basic_string на основе XML_UNICODE_WCHAR_T определения.

Однако есть проблема, которая препятствует компиляции Poco::XML с XML_UNICODE_WCHAR_T. Github issue был создан, и проблема теперь исправлено в ветке разработки для выпуск 1.5.3.

person Alex    schedule 04.06.2014
comment
Я и мои коллеги исправили эту проблему, используя toXMLString и fromXMLString для преобразования std::string. Наверное это не правильно. (метод parseString по-прежнему недоступен). Я предполагаю, что никто не использует DOMParser для wstring, поэтому этот функционал недоступен. Также мы столкнулись с той же проблемой (невозможно скомпилировать с XML_UNICODE и XML_UNICODE_WCHAR_T) с PocoUtils/XMLconfiguration.cpp. - person user3555886; 04.06.2014
comment
Вы можете конвертировать туда и обратно из/в std::string, если убедитесь, что std::string закодирован в UTF-8. Вы, конечно, заплатите некоторую потерю производительности за преобразования. Util зависит от XML, поэтому, если сборка XML нарушена с помощью XML_UNICODE_WCHAR_T, Util также не будет выполнять сборку. Вышеупомянутое исправление должно позаботиться об этом. - person Alex; 04.06.2014