日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > windows >内容正文

windows

tinyxml 读取文本节点_在Windows下使用TinyXML-2读取UTF-8编码包含中文字符的XML文件...

發布時間:2024/7/23 windows 35 豆豆
生活随笔 收集整理的這篇文章主要介紹了 tinyxml 读取文本节点_在Windows下使用TinyXML-2读取UTF-8编码包含中文字符的XML文件... 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

TinyXML-2 是一個用 C++ 開發的小巧、高效的 XML 解析工具,它在 GitHub 網站上的鏈接為:

https://github.com/leethomason/tinyxml2 。它的結構非常精簡,僅由 tinyxml2.h 和 tinyxml2.cpp 兩個文件組成。TinyXML-2 能夠處理 UTF-8 編碼方式的 XML 文件,而 Windows 操作系統使用的文字編碼方式是 UTF-16,所以如果在 Windows 平臺上使用 TinyXML-2,應當留意編碼方式的差異,有時需要進行編碼轉換。

這里舉一個簡單例子:在簡體中文版 Windows 7 平臺上,要使用 TinyXML-2 處理一個包含中文字符、UTF-8 編碼的 XML 文件,該文件名為 Example.xml,內容如下:

電路板&1號

http://amazon.com

現在要讀取元素節點 circuit_board 中包含的文本節點(其實就是“電路板&1號”),示例程序如下:

/**************************************************

* Author: HAN Wei

* Author's blog: http://blog.csdn.net/henter/

* Date: April 17th, 2017

* Description: demonstrate how to read XML content

including Chinese characters by using TinyXML-2

**************************************************/

#include "Windows.h"

#include "tinyxml2.h"

#include

using namespace std;

int main(void)

{

char file_name[256] = {"Example.xml"};

wchar_t *buffer;

int buffer_len;

tinyxml2::XMLDocument doc;

tinyxml2::XMLText* CircuitBoardTextNode;

_wsetlocale(LC_ALL, L"chs");

doc.LoadFile(file_name);

if ( doc.ErrorID() )

{

wprintf(L"加載配置文件出錯!\n");

system("pause");

return (-1);

}

doc.Print();

CircuitBoardTextNode = doc.FirstChildElement("material_list")->FirstChildElement("circuit_board")->FirstChild()->ToText();

const char* CircuitBoardName = CircuitBoardTextNode->Value();

if ( !(buffer_len = MultiByteToWideChar(CP_UTF8, 0, CircuitBoardName, -1, NULL, 0)) )

{

wprintf(L"編碼轉換錯誤!\n");

system("pause");

return (-1);

}

buffer = new wchar_t[buffer_len];

if ( !(MultiByteToWideChar(CP_UTF8, 0, CircuitBoardName, -1, buffer, buffer_len)) )

{

wprintf(L"編碼轉換錯誤!\n");

system("pause");

return (-1);

}

wprintf(L"\n%ls\n\n", buffer);

delete [] buffer;

system("pause");

return 0;

}

使用Visual Studio編譯并執行這個程序,輸出結果如下:

從輸出結果可以看出:

1. 使用 TinyXML-2 從 XML 中讀取內容時,會將讀出的字符串以 char 數組形式存儲。在中文版 Windows 操作系統中,使用 tinyxml2::XMLDocument 類的 Print( ) 方法輸出 XML 文件的內容時,如果輸出內容是可顯示的 ASCII 字符,不會有任何問題;如果輸出內容是 UTF-8 編碼的中文字符,則會顯示亂碼。

2. 為了能在 Windows 中正確顯示 XML 中包含的中文字符,可以使用 Kernel32.dll 中包含的 MultiByteToWideChar( ) 函數,將 UTF-8 編碼的中文字符轉換為 UTF-16 編碼方式的中文字符。在 Windows 中能正確顯示 UTF-16 編碼的中文字符,不會出現亂碼。

3. 使用 tinyxml2::XMLDocument 類的 Print( ) 方法輸出 XML 文件中的內容時,Print( ) 方法不會對 XML 規范中定義的轉義字符做轉換。在本例中,Print( ) 方法被調用后,并未將 & 轉換為 & 。

4. 當 tinyxml2::XMLNode::ToText( ) 方法被調用時,會自動處理 XML 規范中定義的轉義字符。在本例中,將 & 自動轉換為 & ,不需要編程者再做處理。

在文本編輯器 EditPlus 或 Notepad++ 中,能夠選擇文件編碼方式,操作類似于下圖:

對于 Example.xml 這個文件,不管以包含 BOM 的 UTF-8 編碼方式保存它,還是以不帶 BOM 的 UTF-8 編碼方式保存它,運行上面的示例程序,發現都能夠正常執行。由此可知,對于 UTF-8 編碼的 XML 文件中包含或不包含 BOM 這兩種情況,TinyXML-2 都能夠正確處理。

總結

以上是生活随笔為你收集整理的tinyxml 读取文本节点_在Windows下使用TinyXML-2读取UTF-8编码包含中文字符的XML文件...的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。