簡體   English   中英

從字節數組將XML加載到C ++ MSXML中

[英]Load XML into C++ MSXML from byte array

我正在通過網絡套接字接收XML。 我需要獲取該XML並將其加載到DOM中以執行進一步的操作。 MSXML要求輸入字符串在UCS-2或UTF-16中,並且從字符串加載時完全忽略具有編碼類型的XML標頭。 它允許加載XML片段,因此這很有意義。

我看到兩種可能的方法來解決此問題:

1)將文件寫出到磁盤,然后通過文件路徑將其加載到MSXML中。 額外的磁盤I / O使這種方法遠非首選。

2)進入XML標頭以手動檢測編碼,然后調用MultiByteToWideChar轉換為UTF-16並根據檢測到的編碼指定代碼頁。 這種方法行得通,但是我想將編碼檢測推到MSXML上。

是否有人對實現此目標有其他想法?

我沒有看過其他XML解析器,但會對非MSXML DOM解析器如何完成此工作感興趣。

謝謝保羅

最簡單的方法是將加載函數傳遞給安全數組。 例如

const char* xml = "<root/>";

SAFEARRAYBOUND rgsabound[1];
rgsabound[0].lLbound = 0;
rgsabound[0].cElements = strlen(xml);

SAFEARRAY* psa = SafeArrayCreate(VT_UI1, 1, rgsabound);
memcpy(psa->pvData, xml, strlen(xml));
VARIANT v;

VariantInit(&v);
V_VT(&v) = VT_ARRAY | VT_UI1;
V_ARRAY(&v) = psa;
VARIANT_BOOL fSuccess;
pXMLDoc->load(v, &fSuccess);
if(fSuccess == VARIANT_TRUE)
{
    /* Do Something */
}

顯然,沒有錯誤檢查正在進行或釋放資源。

或使用CreateStreamOnHGlobal在數據上創建一個IStream並將其傳遞給負載。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM