構文
XML_HANDLE XML_CreateXmlObject(
  int src_type,
  const char *src,
  int offset,
  int length,
  XML_LOCAL_TO_UTF8_STRING LocalToUtf8Func,
  XML_UTF8_TO_LOCAL_STRING Utf8ToLocalFunc,
  int *ErrCode
);
パラメータ
- src_type
 - 
  [in] ソースデータのタイプを次の値で指定します。
  
タイプ 説明 XML_LOCAL_STRING ローカルコードで記述したXMLドキュメントのバッファ XML_UTF_STRING UFT-8またはUTF-16で記述したXMLドキュメントのバッファ XML_UTF_FILE UTF-8またはUTF-16で記述したXMLドキュメントのファイル  - src
 - 
  [in] ソースデータのタイプにより次の値を設定します。
  
タイプ 設定する値 XML_LOCAL_STRING XMLドキュメントを格納したバッファを指すポインタ XML_UTF_STRING XMLドキュメントを格納したバッファを指すポインタ XML_UTF_FILE ファイル名の文字列を指すポインタ  - offset
 - [in] XMLドキュメントのデータの開始位置をソースデータ上のバイトオフセットで指定します。
 - length
 - [in] XMLドキュメントのデータのバイト数を指定します。負の値を指定すると、指定されたソースデータの最後までを解析します。
 - LocalToUtf8Func
 - [in] ローカルコードの文字列をUTF-8の文字列に変換するXML_LOCAL_TO_UTF8_STRING型のコールバック関数を指すポインタ。コード変換が不要のときはNULLを指定します。
 - Utf8ToLocalFunc
 - [in] UTF-8の文字列をローカルコードの文字列に変換するXML_UTF8_TO_LOCAL_STRING型のコールバック関数を指すポインタ。コード変換が不要のときはNULLを指定します。
 - ErrCode
 - [out] エラーコードを返す変数を指すポインタ。エラーコードが不要のときはNULLを指定します。
 
戻り値
関数が成功したらXMLハンドル (XML_HANDLE) の値を、それ以外はNULLを返します。解説
指定されたバッファまたはファイルに格納されているXMLドキュメントのデータを解析してXMLオブジェクトに変換し、このオブジェクトを参照するためのXMLハンドル (XML_HANDLE) を返します。
制限事項については次のページを確認してください。
src_typeに、XML_LOCAL_STRING、XML_UTF_STRING、XML_UTF_FILEのいずれかの値を指定して、XMLドキュメントのソースデータのタイプを指定します。
src_typeにXML_LOCAL_STRINGを指定すると、ローカルコードのXMLドキュメントを読み込むことができます。これは、アプリケーションプログラムで新規のXMLドキュメントを作成するときに便利な方法を提供します。
    char *xmlDefault =
        "<appConfig>"
        "  <addr>192.168.1.1</addr>"
        "</appConfig>";
    XML_HANDLE hXml;
    hXml = XML_CreateXmlObject(XML_LOCAL_STRING, xmlDefault, 0, -1, NULL, NULL, NULL);
src_typeにXML_UTF_STRINGを指定すると、サーバから受信したUTF-8のXMLドキュメントなどを読み込んでXMLオブジェクトに変換することができます。
src_typeにXML_UTF_FILEを指定すると、ファイルに保存したUTFのXMLドキュメントを読み込んでXMLオブジェクトに変換することができます。
- ローカルコードまたはUTF-16のドキュメントは、解析を開始する前にUTF-8に変換されます。
 - UTF-16のドキュメントでは、UTF-16 LE または UTF-16 BE を表すBOMがXMLデータの先頭に配置されている必要があります。
 - UTF-16のドキュメントでは、UFT-16エンコーディングを指定したXML宣言がドキュメントの先頭に配置されている必要があります。
 - XML_UTF_STRING または XML_UTF_FILE を指定したとき、XML宣言が省略されている場合はUTF-8のドキュメントとして解析します。
 
srcに、ソースデータのタイプに合わせて、バッファまたはファイル名の文字列を指すポインタを指定します。
offsetにバイトオフセットを指定することにより、src_typeとsrcで指定したソースデータ上でのXMLドキュメントのデータの開始位置を指定することができます。0を指定すると、ソースデータの先頭から解析を行います。
lengthにXMLドキュメントのデータのバイト数を指定します。負の値を指定すると、次の範囲のデータを解析します。
| タイプ | lengthに負の値を指定したときの解析範囲 | 
|---|---|
| XML_LOCAL_STRING | offsetの位置からASCIIのNUL文字 ('\0') まで。 | 
| XML_UTF_STRING | UTF-8の場合、offsetの位置からASCIIのNUL文字 ('\0') まで。 UTF-16の場合、offsetの位置からユニコードのnull文字 (L'\0') まで。  | 
    
| XML_UTF_FILE | offsetの位置からファイルの最後まで。 | 
LocalToUtf8Funcに、ローカルコードの文字列をUTF-8の文字列に変換するコールバック関数を指すポインタを指定します。XMLドキュメントでASCIIコードしか使用しない場合など、コード変換が不要のときはNULLを指定します。
このコールバック関数には、XML_LOCAL_TO_UTF8_STRING型の関数を指定します。次の関数はこの型と互換性があり、LocalToUtf8Funcパラメータに直接指定できます。
このコールバック関数は、次の関数を使用したときに呼び出されます。
XML_CreateXmlObject関数 (本関数): src_typeにXML_LOCAL_STRINGを指定したとき
XML_SetAttribute関数
XML_SetChildNodeValueByPath関数
XML_SetNodeValue関数
XML_SetNodeValueByPath関数
Utf8ToLocalFuncに、UTF-8の文字列をローカルコードの文字列に変換するコールバック関数を指すポインタを指定します。XMLドキュメントでASCIIコードしか使用しない場合など、コード変換が不要のときはNULLを指定します。
このコールバック関数には、XML_UTF8_TO_LOCAL_STRING型の関数を指定します。次の関数はこの型と互換性があり、Utf8ToLocalFuncパラメータに直接指定できます。
このコールバック関数は次の関数を使用したときに呼び出されます。
XMLドキュメントの解析が成功し、XMLハンドルを返す場合でも、次の条件を満たす場合はErrCodeにエラーコードが返されるので注意してください。
- src_typeにXML_UTF_STRINGまたはXML_UTF_FILEを指定した。
 - Utf8ToLocalFuncにコールバック関数を指定した。
 - XMLの解析は成功したが、上記のコールバック関数がローカルコードに変換できないユニコードを検出した。(この場合、ローカルコードに変換できなかった文字は'?'に置き換えられています。)
 
この場合、ErrCodeに次のエラーコードを返します。
| エラーコード | 説明 | 
|---|---|
| XML_UNSUPPORTED_CODE_WARNING | ローカルコードに変換できないユニコードの文字が検出された。 | 
関数が失敗したときはNULLを返し、ErrCodeには次のエラーコードを返します。
| エラーコード | 説明 | 
|---|---|
| XML_INVALID_PARAMETER_ERROR | パラメーターエラー | 
| XML_MEMORY_ALLOCATION_ERROR | メモリーアロケーションエラー | 
| CONV_INVALID_UTF8_FORMAT_ERROR | UTF-8の規格に合致しないバイト列を検出した。 | 
| XML_FORMAT_ERROR | XMLの解析でフォーマットの異常が検出された。 | 
| XML_FILE_ERROR | ファイルエラー | 
| XML_UNICODE_CONVERSION_ERROR | ユニコードに変換できないローカルコードの文字が検出された。 | 
本関数で取得したXMLオブジェクトが不要になったら必ずXML_ReleaseXmlObject関数を呼び出してXMLオブジェクトのリソースを解放してください。
必要条件
- ヘッダファイル:
 - 
    XML.h
CodeConversion.h : ver.1.1.1以降 - ライブラリファイル:
 - 
    libXML.a
libCodeConversion.a : ver.1.1.1以降
libSTARTUPOPH5000.a 
サンプル
UTF-8やUTF-16のXMLドキュメントをSJISに変換するサンプルです。Utf8ToLocalFuncにCONV_Utf8ToSjisString関数を指定しています。
#include "CodeConversion.h"
...
    XML_HANDLE hXml;
    int ErrCode;
    char *utfBuffer;
...
    hXml = XML_CreateXmlObject(XML_UTF_STRING, utfBuffer, 0, -1,
        NULL, CONV_Utf8ToSjisString, &ErrCode);
...
プログラムでXMLオブジェクトの編集を行い、その際にSJISからUTF-8へのコード変換が必要な場合は、LocalToUtf8Funcも設定を行う必要があります。
#include "CodeConversion.h"
...
    XML_HANDLE hXml;
    int ErrCode;
    char *utfBuffer;
...
    hXml = XML_CreateXmlObject(XML_UTF_STRING, utfBuffer, 0, -1,
        CONV_SjisToUtf8String, CONV_Utf8ToSjisString, &ErrCode);
...
関連事項
最終更新日:2021/10/21