[Android] afvangen faulty xml (& ipv &)

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • cedal
  • Registratie: Oktober 2010
  • Laatst online: 08-05 13:22
Hey mensen!
Ik ben een Android app aan het bouwen waarbij ik XML moet parsen die wordt gegenereerd door een programma op een webserver. Echter, de webserver genereert gegarandeerd geen correcte XML en ik kan het programma niet aanpassen |:( ...

De fout: bijzondere characters worden niet ge-escaped door de webserver:
<entity1>
____<entity2>text & text</entity2>
</entity1>

Het &-teken moet natuurlijk &amp; zijn of een unicode alternatief

Ik wil de gebruiker er niets van laten merken, dus moet de fout opgevangen worden. Ik dacht eraan om van tevoren in de string alle bijzondere characters op te zoeken en deze te vervangen door juiste equivalenten. Ik weet niet precies met welke zoektermen ik moet gooien om te ontdekken hoe dat gedaan moet worden in Android, dus vraag daarbij jullie hulp.

Misschien hebben jullie zelfs een beter alternatief :9

Update: ik ben inmiddels weer verder aan het zoeken. Dit ga ik waarschijnlijk gebruiken:
xmlString = xmlString.replace('&','&');
Kan dit trouwens niet zo: xmlString = xmlString.replace('&','&').replace('<','<').replace('>','&rt;'); ?

[ Voor 12% gewijzigd door cedal op 26-12-2014 21:17 ]


Acties:
  • 0 Henk 'm!

Anoniem: 111703

Dus eerst:

Java:
1
xmlString = xmlString.replace('&','&');


En vervolgens zeg je:

Java:
1
xmlString = xmlString.replace('<','<');


Maar:

Java:
1
xmlString = xmlString.replace('>','&rt;');


Kortom: schiet mij maar lek. :)

Wat je namelijk (van wat ik lees) gewoon wilt, is je HTML escapen. Dit lijkt mij ook belangrijke kennis om in huis te hebben.

Acties:
  • 0 Henk 'm!

  • Kwastie
  • Registratie: April 2005
  • Laatst online: 19:31

Kwastie

Awesomeness

Als de webserver ook door jou ontwikkeld is, is het dan niet verstandig om altijd valid XML te genereren? Stel je ontwikkeld nog een App of een andere partij wil koppelen.. 8)7

@Maximized
Klikt als symptoombestrijding i.p.v. een echte oplossing..

Invalid xml is imho geen xml

[ Voor 24% gewijzigd door Kwastie op 26-12-2014 23:05 ]

When I get sad i stop being sad and be awesome instead


Acties:
  • 0 Henk 'm!

  • cedal
  • Registratie: Oktober 2010
  • Laatst online: 08-05 13:22
Jullie hebben een punt, maar de webserver is een closed source programma van een paar jaar oud. Ik wete niet van de hoed en de rand, maar voorlopig doe ik inderdaad aan symptoombestrijding.

En het tweakers forum kon mijn input niet handelen :p
"xmlString = xmlString.replace('&','&amp;').replace('<','&lt;').replace('>','&gt;');"

Acties:
  • 0 Henk 'm!

  • SPee
  • Registratie: Oktober 2001
  • Laatst online: 13-05 12:56
Alleen vergeet je nu om een controle te doen, dat je niet de valide xml veranderd ;)
Ik zou op zoek gaan naar libraries die xml escaping doen. Of een controle op de omliggende tekst, zodat je enkel de onjuiste tags aanpast.

Jou regel veranderd nu valide xml
XML:
1
<test></test>

naar tekst
XML:
1
&lt;test&gt;&lt;/test&gt;

[ Voor 5% gewijzigd door SPee op 27-12-2014 21:22 . Reden: in code tags komt dit wel duidelijk door ]

let the past be the past.


Acties:
  • 0 Henk 'm!

  • cedal
  • Registratie: Oktober 2010
  • Laatst online: 08-05 13:22
Ik heb nu dit:
Java:
1
response = response.replace("& ","&amp; ");

< en > tekens komen nergens voor en gan dus ook niet afgevangen worden. Ik moet alleen de gebruikers nog even netjes laten weten als hun app crasht op de xml parser.

Tipje van de sluier: gaat om een NowPlaying.xml van een jong webradio station. De software die de radiocomputer gebruikt lijkt af en toe wel uit het jaar 0 (lettelijk: 2000).

Thanks voor jullie input. Als jullie willen kan ik binnenkort de link naar de app in de appstore weergeven. (als dat mag volgens de forumregels)

Acties:
  • 0 Henk 'm!

  • DJMaze
  • Registratie: Juni 2002
  • Niet online
Kan je niet op de server d.m.v. htaccess de "NowPlaying.xml door een script halen?
Bijvoorbeeld:
code:
1
2
RewriteEngine On
RewriteRule NowPlaying.xml NowPlaying.php [L]


PHP:
1
2
3
<?php
$xml = file_get_contents('NowPlaying.xml');
echo preg_replace('/&(?![\\w\\#]+;)/', '&amp;', $xml);

Maak je niet druk, dat doet de compressor maar

Pagina: 1