2017-05-12 4 views
1

ANSIエンコードされたXMLファイルをMSXML2.DOMDocumentを使用してロードする必要がありますが、そのファイルには<?xml version="1.0" encoding="Windows-1250"?>行が含まれていません。 XMLデータには一部の国別文字が含まれているため、XMLパーサーはAn invalid character was found in the text contentで失敗します。MSXML2に非UTF-8エンコードされたXMLを読み込ませる方法

このような処理手順を追加しようとしましたが、何もしません。

Dim xDoc As MSXML2.DOMDocument 
Set xDoc = New MSXML2.DOMDocument 

Dim PI 
Set PI = xDoc.createProcessingInstruction("xml", "version='1.0' encoding='windows-1250'") 
xDoc.insertBefore PI, xDoc.childNodes.Item(0) 

If xDoc.Load("C:\Test.xml") Then 
    Debug.Print "Success" 
Else 
    Debug.Print xDoc.parseError.reason 
End If 

Set xDoc = Nothing 

.loadメソッドを呼び出す前に、MSXML2にユーザー定義のエンコードを使用させる方法はありますか?

+0

を*あなたのファイルは、すべての*何も処理命令を持っていないと言って、またはされていますか? –

+0

XMLファイルには処理命令がまったくありません。それは ''で始まり、 ''で終わり、これらのタグの間で有効です。 – Combinatix

+1

''をあなたの必要な処理命令に置き換えて、 'xDoc.LoadXML'を使って修正されたバージョンからメモリにロードすることができます。 'Load'を使います)。 –

答えて

0

この回避策を見つけました。代わりに.LoadXML(strXML)メソッドを使用してください。 あなたがこの方法の処理情報を追加することができます:あなたはPIが間違った文字セットを持っているだけのこと

Dim MyXML As String 
Open "C:\Pass.XML" For Binary As #1 
MyXML = Space$(LOF(1)) 
Get #1, , MyXML 
Close #1 

MyXML = "<?xml version='1.0' encoding='windows-1250'?>" & vbCrLf & MyXML 

If xDoc.loadXML(MyXML) Then 
    Debug.Print "Success" 
Else 
    Debug.Print xDoc.parseError.reason 
End If 
関連する問題