Oprettet tor. d. 07. juni 2012 kl. 12:07:41

globen
globen (10.400 point. Point ude: 200)

Parse ulovlige xml chars

Hej eksperter.

Kort spørgsmål. Findes der ikke en metode i .NET jeg kan bruge til at parse ulovlige xml karakterer, når jeg gerne vil loade et xml dokument med System.Xml.XmlDocument.LoadXml(string xml)?

Jeg har gentagne gange fundet mig selv i gang med at implementere denne logik selv, og jeg er lidt træt af det.

Når jeg læser InnerTexxt/InnerXml på et element i dokumentet der indeholder "B&O", så bliver det implicit parset til "B&O". Det er sådan set den omvendte logik jeg er ude efter.

Skrevet tor. d. 07. juni 2012 kl. 13:16:39| #1

jakobdo
jakobdo (184.837 point)
www.simitu.dk
Bare en tanke.
Kunne man ikke indlæse xml filen som en streng.
og så lave en replace på ulovlige tegn, måske noget htmlentities eller lign og herefter parse filen?

Skrevet tor. d. 07. juni 2012 kl. 13:38:35| #2

globen
globen (10.400 point)
Nu kender jeg ikke til htmlentities, men jeg kunne forestille mig, at man her også parser visse karakterer, som er gyldige i xml, såsom eøå f.eks.

Den approach jeg har anvendt, når jeg har implementeret dette manuelt er:

- Erstat alle ulovlige chars som i forvejen er escaped med en guid
- Escape ulovlig chars
- Erstat ovenstående guids med de orginale værdier

Dette selvfølgelig for at undgå at erstatte & med &.

Jeg syntes det er triviel at implementere dette (det er sikkert hellere ikke særligt performancevenligt, at læse dokumentet igennem tre gange for at parse det), og jeg tænker at denne funktionalitet sikkert findes et eller andet sted i selve .NET frameworket.

Skrevet tor. d. 07. juni 2012 kl. 13:49:16| #3

jakobdo
jakobdo (184.837 point)
www.simitu.dk
En anden tanke.
Kunne du ikke bare sige til afsender af den xml fil, at den skal være valid?

Skrevet fre. d. 08. juni 2012 kl. 02:31:54| #4

arne_v
arne_v (1.048.778 point)
Forslag til at haandtere &:

using System;
using System.Text.RegularExpressions;

namespace E
{
    public class Program
    {
        public static void Main(string[] args)
        {
            string s = "B&O & B&O &";
            Console.WriteLine(s);
            string s2 = Regex.Replace(s, "&(?!amp;)", "&");
            Console.WriteLine(s2);
            Console.ReadKey();
        }
    }
}

Skrevet tor. d. 27. december 2012 kl. 13:19:46| #5

montago
montago (32.106 point)
du kan med Regex semi-parse din XML hvis den ellers er gyldig resten af vejen:

Regex.Replace
(
    @"<?xml><hello src='asd?123'>world & crap, ping & pong</hello></xml>"
    /*/
    //Løsning 1:
    ,@"(>[^<>]+?<)"
    ,(a) => {
        return a.Value.Replace("&","&amp;");
    }
    /*/
    //Løsning 2:
    ,@"(>[^<>]+?)&([^<>]+?<)"
    ,"$1&amp;$2"
    /**/
)

Løsning 2 forudsætter at der kun er ET stk og-tegn som skal erstattes pr xml-tag da den kun erstatter den første.. den er tilgengæld hurtigst..

Løsning 1 parser XML'en med regex og laver en search-replace på alle strenge mellem tags som indeholder og-tegn - den er en smule langsommere og kan blive tung hvis XML'en er KÆMPESTOR... men sikkert ikke noget du mærker.

brug '*' til at skifte imellem de to løsninger.

Skrevet tor. d. 27. december 2012 kl. 13:21:01| #6

montago
montago (32.106 point)
hov.. regex i (1) skulle være se magen til ud som i (2):

,@"(>[^<>]+?)&([^<>]+?<)"

Skriv et indlæg




Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] [img]link til billede[/img]
Web- og emailadresser omdannes automatisk til links

Log ind

   


Seneste spørgsmål

webcam code .aspx

Oprettet den 23. maj 2013 kl. 16.03
webhjaelp giver 60 point for svar | Giv et svar »

ASP.NET og traadning deri

Oprettet den 22. maj 2013 kl. 00.33
justincase1089 giver 60 point for svar | Giv et svar »

Undgå duplikeret kode i en asp.net web form applikation

Oprettet den 15. maj 2013 kl. 00.36
jan_h giver 100 point for svar | Giv et svar »








Tips & Tricks fra PC World

Teaser billede

Fem smarte funktioner i din Mac som du sikkert ikke kender

Her har du fem muligheder for at tweake din Mac på en fed måde.


Anmeldelser fra PC World

Teaser billede

Test: Samsung Galaxy S4 er et hit - trods gøglertricks

Kan Samsung beholde førertrøjen i det store Android-race? Galaxy S4 er smækfyldt med innovative funktioner, men også med en del gøgl. Er det for meget? Få vores dom over Samsungs nye topmodel.


Seneste blogindlæg

Teaser billede

Tvangslukke spørgsmål: Hvad er den bedste løsning?

Hej Vi har mange åbne spørgsmål på Eksperten. Vi ville gerne tvangslukke dem - så et spørgsmål efter f.eks. 6 måneder lukkes. Men der er et par uklarheder som ville være gode at få lidt input til:...


Nyheder fra PC World

Teaser billede

Ny opfindelse: Oplad din mobil på 20 sekunder

Måske er det snart slut med at lade mobilen op hver aften. Med ny opfindelse kan telefonen få fuld energi på sølle 20 sekunder.


Nyheder fra Computerworld

Teaser billede

Galleri: De 10 vildeste datacentre i verden

I en gammel kirke, i et oppusteligt telt, på nedlagte militæranlæg eller midt i ørkenen. Der er ingen grænser for, hvor man kan banke et datacenter op. Her er de 10 sejeste anlæg i verden. I...


IT Kurser
Samarbejdspartnere

Udgiver · © 2013 IDG Danmark A/S · Hørkær 18 · 2730 Herlev · Tlf.: 77 300 300 · Fax: 77 300 301 · Brug af personoplysninger