[英]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.