Avatar billede TBoy3 Novice
13. maj 2015 - 07:50 Der er 7 kommentarer og
1 løsning

Kan ikke læse & i xml fil

Jeg forsøger at indlæse nogle url fra en xml fil til vb.net, det går meget godt med f.eks. http://eksperten.dk, men hvis jeg har en url med & i så får jeg fejl i parsing.

Jeg læser xml'en sådan her:

xmld = New XmlDocument()
xmld.Load("C:\Web.xml")
xnodelist = xmld.SelectNodes("/root/webpage")


og xml'en sådan her:

<?xml version="1.0" encoding="UTF-8"?>
<root>
    <webpage>
        <url>http://eksperten.dk</url>
        <time>5000</time>
    </webpage>
    <webpage>
        <url>http://test.dk/PermalinkViewer.htmx?viewId=1&linkType=htmlType</url>
        <time>5000</time>
    </webpage>
</root>

Den fejler i linje 8 ved det første &
Avatar billede TBoy3 Novice
13. maj 2015 - 07:58 #1
Nå fandt selv svaret. Man skal ændre alle & til &amp;
så virker det.
Avatar billede lennartoester Nybegynder
13. maj 2015 - 09:10 #2
Når du laver en XML fil hvor du skal have special tegn og specielt & tegnet, så har du to valgmuligheder.

1. (Den mest rigtige) Brug UrlEncode/UrlDecode på HttpContext namespacet. På den måde kan du bruge alle URL'er

2. (virker) Du kan bruge en CDATA sektion på det XML element som indeholder Url'en. Det er ikke kønt, men det virker. Du bruger typisk CDATA til at holde billed data eller andre binære typer.

Håber det hjælper
Avatar billede lennartoester Nybegynder
13. maj 2015 - 09:11 #3
Det er korrekt at du kan gøre sådan, men se mit svar herunder for den korrekt metode :-) En der sikrer at du ikke misser andre eventuelle special tegn
Avatar billede lennartoester Nybegynder
13. maj 2015 - 09:12 #4
Det er korrekt at du kan gøre sådan, men se mit svar herunder for den korrekt metode :-) En der sikrer at du ikke misser andre eventuelle special tegn
Avatar billede TBoy3 Novice
13. maj 2015 - 10:03 #5
Tak for dit svar, det vil jeg kigge nærmere på, så man er fri for at skulle ændre url'erne.
Avatar billede arne_v Ekspert
17. maj 2015 - 04:25 #6
Jeg er helt uenig.

Brug af UrlEncode paa en hel URL vil totalt maltraktere den.

CDATA vil virke men er grimt.

Den rigtige loesning er at bruge SecurityElement.Escape paa URL.
Avatar billede arne_v Ekspert
17. maj 2015 - 04:59 #7
Ja deb akkerbedste loesning er naturligvis at undgaa problemet ved at skrive den XML som XML, saa vil den slags blive haandteret helt automatisk.
Avatar billede arne_v Ekspert
17. maj 2015 - 04:59 #8
Demo:


Imports System
Imports System.Security
Imports System.Web
Imports System.Xml

Namespace E
    Public Class Program
        Public Shared Sub Main(args As String())
            Dim s As String = "http://test.dk/PermalinkViewer.htmx?viewId=1&linkType=htmlType"
            Console.WriteLine(s)
            Dim s1 As String = HttpUtility.UrlEncode(s)
            Console.WriteLine(s1)
            Dim s2 As String = SecurityElement.Escape(s)
            Console.WriteLine(s2)
            Using xw As XmlWriter = XmlTextWriter.Create(Console.Out)
                xw.WriteStartDocument()
                xw.WriteElementString("url", s)
                xw.WriteEndDocument()
            End Using
            Console.ReadKey()
        End Sub
    End Class
End Namespace
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester