C++でのlibxml2とXpathを使用したxml解析
XMLのTEXTを更新したいのですが、DOMが全く変化しません。
/**
* xmlDocPtr &node 元のDOM
* string text 挿入するTEXT
* xmlChar *xpath_expr 更新する対象
**/
void DomParser::textUpdate(xmlDocPtr &node, string text, xmlChar *xpath_expr) {
// XpathでDOMを抽出する。(動作確認済み)
xmlNodeSetPtr dom = scrapeNodeList(node, xpath_expr);
if (!xmlXPathNodeSetIsEmpty(dom)) {
for (int i = 0; i < dom->nodeNr; i++) {
// 既存TEXTの除去
xmlNodePtr node = xmlXPathNodeSetItem(dom, i);
xmlUnlinkNode(node->children);
xmlFree(node->children);
// 新規TEXTの追加
xmlNodePtr new_text = xmlNewText((xmlChar*)text.c_str());
xmlAddChild(node, new_text);
}
}
}
何がいけないのでしょうか?
argus さん
ご回答ありがとうございました。
検証コードを拝見しました。
私の実装と目立ったロジックの差異がないため、もしやと思い、
こちらのソースでも、
更新後のcontent内容出力してみました。
結果は更新されていました。しかし、何度確認しても、更新後viでxmlを開くと、
更新されていない状態で表示されます。
ドキュメントに対してコミットのようなことをする必要があるのでしょうか?