XMLLite(書き出し時)について


超初心者  2009-09-16 16:44:43  No: 70943  IP: [192.*.*.*]

毎度お世話になります。

こちらで改めて質問させてください。


XMLLiteで、サイトを参考にxml書き出し処理を作成しています。


if( FAILED(pWriter->WriteStartDocument(XmlStandalone_Omit)) )
{
    _tprintf( _T("WriteStartDocument失敗") );
    return false;
}
if( FAILED(pWriter->WriteStartElement(NULL, L"sample", NULL)) )
{
    _tprintf( _T("WriteStartElement失敗") );
    return false;
}
if( FAILED(pWriter->WriteStartElement(NULL, L"requirement", NULL)) )
{
    _tprintf( _T("WriteStartElement失敗") );
    return false;
}
if( FAILED(pWriter->WriteElementString(NULL, L"type", NULL, L"ヘッダ")) )
{
    _tprintf( _T("WriteElementString失敗") );
    return false;
}
if( FAILED(pWriter->WriteElementString(NULL, L"name", NULL, L"XmlLite.h")) )
{
    _tprintf( _T("WriteElementString失敗") );
    return false;
}
if( FAILED(pWriter->WriteFullEndElement()) )
{
    _tprintf( _T("WriteFullElement失敗") );
    return false;
}
if( FAILED(pWriter->WriteEndDocument()) )
{
    _tprintf( _T("WriteEndDocument失敗") );
    return false;
}
if( FAILED(pWriter->Flush()) )
{
    _tprintf( _T("Flush失敗") );
    return false;
}

これで、

<?xml version="1.0" encoding="UTF-8"?>

<sample>
  <requirement>
    <type>ヘッダ</type>
    <name>XmlLite.h</name>
  </requirement>
</sample>

こういう形のXMLを書けるのですが、pWriter->WriteFullEndElementとpWriter->WriteEndDocumentはどっちか一方がなくてもきちんと上記の形で出力されます。

両方要素を閉じる動きだという認識でいるのですが、どういう違いがあるのでしょうか?

pWriter->WriteEndDocumentはルートエレメントを閉じるためのもの、pWriter->WriteFullEndElementはルートエレメント以下のノードを閉じるためのもの、ということなのでしょうか?

どなたかご教授いただけるとありがたいです。


宜しくお願い致します。

編集 削除