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.
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?
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.
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(); } } }
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.
hov.. regex i (1) skulle være se magen til ud som i (2):
,@"(>[^<>]+?)&([^<>]+?<)"
Synes godt om
Ny brugerNybegynder
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.