Problem z odczytem pliku XML zawierający znak ampersand

Odpowiedz Nowy wątek
2018-10-31 15:30
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 &

edytowany 2x, ostatnio: ice25, 2018-10-31 15:37

Pozostało 580 znaków

2018-10-31 16:01
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.

tfurca XMLa sobie uprościł, po co jakieś buildery i pańskie wynalazki, można drukować znaki - AnyKtokolwiek 2018-10-31 16:27

Pozostało 580 znaków

2018-11-01 09:52
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
edytowany 1x, ostatnio: ice25, 2018-11-01 10:05

Pozostało 580 znaków

2018-11-01 19:29
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.

Pozostało 580 znaków

Odpowiedz
Liczba odpowiedzi na stronę

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