회사 일로 Xerces C++을 사용하는 중입니다만.. boost와 STL에 찌든 저에게 저런 네이밍은 마음에 안듭니다. 사용법도 복잡하구요.. -_-;
대체물을 물색하다가 libxml2가 떠오르더군요. 지금 이 블로그에서 XML/XSLT 처리기로 사용하고 있는 것이 libxml2/libxslt의 python 바인딩이기도 하고 해서, 잠깐 고려를 해보았습니다. C더군요.. OTL..
Xerces C++을 변경해서 새로운 C++ wrapper를 만들어볼까 했지만, 그다지 마음에 들지도 않고.. 오히려 libxml2가 xpath같은 걸 쉽게 쓸 수 있기도 하고 해서 C++ Wrapper를 만들어보자! 라는 생각이 들었습니다. 몇가지 실험을 해본 결과 만족스럽더군요. operator[ ]를 오버로딩해서 xpath expression을 node에서 바로 쓸 수 있게도 해보고, child를 iterator로 사용할 수 있게도 해보고, iterator도 element만 돌기, text만 돌기 같은 것도 만들어 보구요. 🙂
해서 이름을 붙이려고 하는데, libxml++은 이미 있더군요. (역시나 사용하는 스타일은 매우 마음에 안듭니다.)
사실 libxml2에 있는 기능을 모두 지원할 생각도 없고, xpath를 위주로 한 라이브러리가 될 것 같다는 생각에, Element+라는 이름을 지어보았습니다. 헤헤.
쉬운게 좋은거죠. 히힛.
다만, xpath에 의해 평가된 결과물을 더 쉽게 접근할 수 있는 방법은 좀 더 고민해봐야 할 것 같다는..
목표는 이런거죠 뭐.
element_plus::xpath_result res = doc.eval(“//text()”);
std::for_each(res.begin(), res.end(), std::ptr_fun(print_text_node));
smart tag 처리기가 [ ]를 지원못해서 어쩔수 없이 eval로… ㅡㅜ
요런 스타일로 쓰게 해주는. 헤헤.
이름도 지어놨고, 만드는 일만 남았네요. 아자!