XMLについて

[戻る]
ぱーさー 2009/05/18(月) 11:08:53
MFC, MSXML6 を使用しています。

<aa>
 <bb>
  <cc>11</cc>
  <dd>22</dd>
 </bb>
</aa>

このようなXMLで
<cc>だけ<cc>33</cc>と変えたいのですが、
(<cc>11</cc> の"11"を"33"に変える。)

"11"を削除して"33"を書き込むと考えたのですが、
データのみ編集ということは可能なのでしょうか?
今のところ削除を行う関数がないようなのです。

Blue 2009/05/18(月) 11:18:38
値を変更(put_nodeValueかな?)して、再度保存するだけではないの?

ぱーさー 2009/05/18(月) 13:41:20
回答ありがとうございます。

よくわかっていませんが、WEBベースではなく
IXMLDOMElementPtrの方で作成しております。
(IHTMLDOMENodeは使えないと思っています・・)

Blue 2009/05/18(月) 14:06:11
>(IHTMLDOMENodeは使えないと思っています・・)
関係ないかと。

put_textだった。

以下適当コード

#import "msxml6.dll" rename_namespace("msxml")

HRESULT test()
{
    HRESULT hr = S_OK;

    try
    {
        msxml::IXMLDOMDocumentPtr doc("MSXML.DOMDocument");
        doc->validateOnParse = VARIANT_FALSE;
        doc->load(L"foo.xml");

        msxml::IXMLDOMElementPtr root = doc->documentElement;
        msxml::IXMLDOMNodeListPtr bb_list = root->getElementsByTagName(L"bb");
        msxml::IXMLDOMElementPtr bb_element = bb_list->item[0];
        msxml::IXMLDOMNodeListPtr cc_list = bb_element->getElementsByTagName(L"cc");
        msxml::IXMLDOMElementPtr cc_element = cc_list->item[0];

        cc_element->put_text(L"22");

        doc->save(L"foo.xml");
    }
    catch (_com_error& e)
    {
        // エラー
        hr = e.Error();
    }
    return hr;
}

int main() 
{
    HRESULT hr = ::CoInitialize(NULL);
    if (FAILED(hr)) {
        return 1;
    }
    hr = test();
    ::CoUninitialize();
    return 0;
}

ぱーさー 2009/05/19(火) 15:21:22
[[解決]]
Blueさま

put_textでできました。
いろいろと勉強になります。
このような質問に回答いただきありがとうございました。

古いスレッドには追加発言できません。