2017-05-12 4 views
1

MSXML2.DOMDocument를 사용하여 ANSI 인코딩 된 XML 파일을로드해야하지만 그 파일에는 <?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) 메서드를 사용하십시오. 당신은 정보를 이런 식으로 처리를 추가 할 수 있습니다

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