Word 2007 形式のファイル (*.docx) は,解凍すると word/document.xml に本文(テキスト文章,および書式)に関する情報が格納されてあります.以下は,その OpenXML ファイルからテキストだけを抽出するプログラム.何も考えずに適当に書いただけですが・・・
#include <iostream> #include <string> #include "rapidxml/rapidxml.hpp" #include "rapidxml/rapidxml_utils.hpp" template <class XMLNode> bool extract_word(XMLNode* node) { std::string name(node->name()); if (name == "w:t") { std::cout << node->value(); return true; } for (XMLNode* child = node->first_node(); child != NULL; child = child->next_sibling()) { extract_word(child); } return false; } int main(int argc, char* argv[]) { if (argc < 2) { std::cerr << "format_openxml filename" << std::endl; std::exit(-1); } rapidxml::file<char> in(argv[1]); try { rapidxml::xml_document<char> doc; doc.parse<0>(in.data()); extract_word(doc.first_node()); } catch (rapidxml::parse_error& e) { int pos = reinterpret_cast<int>(e.where<char>()) - reinterpret_cast<int>(in.data()); std::cerr << "parse error (" << pos << ") : " << e.what() << std::endl; std::exit(-1); } return 0; }
はてなダイアリーは,コード記法(?正式名称忘れた)だと html の特殊文字をエスケープせずとも意図した通りに出力されるので楽で良いです.このせいで,コードを載せる記事ははてな以外では書きたくない病に・・・