Problem z odczytem pliku XML zawierający znak ampersand

0

Cześć,
Czy wie ktoś może jak odczytać plik XML który posiada w sobie znak ampersandu ?
bo mam do odczytania plik

<?xml version="1.0" encoding="utf-8"?>
<root>
<package>
<field name="Created date & time" value="2018.10.25 13:28:08" />
</package>
</root>

i niestety już na wstępie po Load nie zaczytuje pliku. Gdy podejrzę ChildNodes obiektu XDoc mam pusto, tak jakby w ogóle pliku mi nie odczytał.
Gdy usunę znak & to działa poprawie


Dim XDoc As Object, root As Object, i As Integer
Set XDoc = CreateObject("MSXML2.DOMDocument")

XDoc.async = False: XDoc.validateOnParse = False
XDoc.Load ("D:\\xmlFiles\\test.xml")
    
Set root = XDoc.DocumentElement

Set lists = XDoc.SelectNodes("//root/package/field")
     For Each item In lists
        Debug.Print item.Attributes.getNamedItem("value").Value
    Next userBean
    

Oczywiście wygooglowałem że znak & powinien być zastąpiony przez &amp no ale niestety w pliku który mam czytać jest &

1

Wczytaj jako plik tekstowy i zamień na &amp;, a potem zrób już normalnie.

Plik XML który zawiera gołe & nie jest poprawnym plikiem XML.

0

Niestety gdy próbuję zaczytać to najpierw jako zwykły txt to na początku tekstu wyświetla mi coś takiego

** **<?xml version="1.0" encoding="utf-8"?>.......

Dim fileName As String, textData As String, textRow As String, fileNo As Integer
'fileName = adres
fileName = "D:\\xmlForTest\\aaa.xml"
fileNo = FreeFile 'Get first free file number
    
Open fileName For Input As #fileNo
Do While Not EOF(fileNo)
   Line Input #fileNo, textRow
   textData = textData & textRow
Loop
Close #fileNo

Gdy pobierałem to od razu jako XML to nie zaczytywał mi tego dziwnego początku. Plik XML jest zapisany w kodowaniu UTF-8. Ktoś wie czemu to coś się pojawiło ?

Rozwiązanie
Wystarczy zastosować odczytywanie przez strumień

Dim objStream, strData

Set objStream = CreateObject("ADODB.Stream")

objStream.Charset = "utf-8"
objStream.Open
objStream.LoadFromFile (adres)

strData = objStream.ReadText()

objStream.Close
Set objStream = Nothing
1

Plik XML jest zapisany w kodowaniu UTF-8. Ktoś wie czemu to coś się pojawiło ?

To jest BOM - Byte Order Mark. Taki specjalny zestaw znaków, dzięki któremu narzędzia rozumieją, że to jest UTF-8 (albo UTF-16 albo UTF-32), dla UTF-8 jest opcjonalny, a w XML-u, który ma powiedziane <?xml version="1.0" encoding="utf-8"?> to w zasadzie jest niepotrzebny.

1 użytkowników online, w tym zalogowanych: 0, gości: 1