javascript xml-dom cdata

Pagina: 1
Acties:

  • w3news
  • Registratie: Mei 2004
  • Laatst online: 09-03 10:15
Ik heb een vraagje over xml-dom in javascript.

Ik wil uit een rss (xml) bestand tekst uitladen via javascript (voor de duidelijkheid, php is geen optie, daar niet over zeuren)
Nu wil ik dat doen voor de browsers Internet Explorer, Firefox, en liefst ook Opera.
Nu heb ik dat leuk voor elkaar, gaat prima, alleen loop tegen 1 nadeel aan helaas.
Als de tekst in het rss (xml) bestand in een cdata staat ( bekende <![CDATA[ t/m ]]> ) dan werkt het wel in Firefox, maar Internet Explorer vindt de tekst niet!

Je mag mijn bagger code wel doorkijken:
http://www.prc2.nl/engine/xpl-load.js

Ik wil de RSS aanpassen via het programma RSS Builder, maar die zet van die leuke cdata er bij, dus als je daarmee wijzigd, werkt de site niet meer in Internet Explorer (wel Firefox)

Het werkt dus allemaal fijn, tot er cdata in komt.

p.s. charChange komt uit:
http://www.prc2.nl/engine/xpl-char.js
maar daar ligt het niet aan.

de tekst wat gaat naar de id tekst2 gaat het om.
De tekst komt dus uit de description tag in RSS.
Wordt gewoon normale RSS(2) gebruikt, wat te bewerken is met RSS Builder.


De bedoeling is:
Site bouwen die ergens staat die geen gebruik kan maken van een server-side taal als PHP of ASP of iets dergelijks.
De informatie makkelijk onderhoudbaar is door iemand zonder html of zo ervaring.
Vandaar deze oplossing van me, wat goed werkt, tot de cdata aan toe.


Vraag is nu:
Weet iemand hier een goede oplossing voor in javascript?
Of een andere oplossing?

Een beter internet begint bij jezelf...


  • Michali
  • Registratie: Juli 2002
  • Laatst online: 22-03 18:12
Even een paar tips met betrekking tot je codeerstijl. Je gebruikt erg vreemde variabel namen. Iets als "hrefSub2a" zegt namelijk vrij weinig over wat voor informatie de variabel gaat bevatten. Daardoor is je code ook vrij lastig te lezen. Daar zou ik dus aan werken. Probeer goed te bedenken wat je in de variabel kwijt wil en probeer daarbij een naam te kiezen die dat duidelijk omschrijft. Zelfde geldt voor functies (wat het doet dan) en andere zaken ook overigens.

De condities in een if statement zijn ook te negativeren. Iets als:
JavaScript:
1
2
3
4
5
6
7
8
if ( boolVar )
{
  ;
}
else
{
  // doe iets
}

is ook zo te schrijven:
JavaScript:
1
2
3
4
if ( !boolVar )
{
  // doe iets
}

Als je niets in een blok zet ben je overigens niet verplicht om een ; neer te zetten. Een leeg blok moet je overigens altijd vermijden. Mocht het toch voorkomen dat je zoiets nodig hebt, geef dan met commentaar aan waarom.

Verder zou ik ook proberen iets consequenter te indenten. Je regels staan niet netjes uitgelijnd en daardoor is de structuur en flow ook lastig te achterhalen.

Ik zal even proberen je probleem te snappen en kijken of ik een oplossing kan vinden.

Edit:

Als ik het goed begrijp laad je nu de rss xml in een aparte (onzichtbare?) frame en lees je zo de gegevens uit. Ben je bekend met XMLHttpRequest? Zo niet, dan zou ik daar toch wat over opzoeken. Ik denk dat je dan op een veel gemakkelijkere manier gegevens kunt ophalen en verwerken.

[ Voor 22% gewijzigd door Michali op 25-09-2005 22:35 ]

Noushka's Magnificent Dream | Unity


  • w3news
  • Registratie: Mei 2004
  • Laatst online: 09-03 10:15
Ik weet de bagger namen van de variabelen en zo, weet het, dat is absoluut niet netjes, code is ook al tijden terug geschreven, die ik opnieuw gebruik, moet dat maar eens grondig keertje opnieuw herschrijven.
Code heb ik allemaal zelf geschreven, alleen zo vaak weer veranderd, daardoor zijn lege plekke ontstaan, erg slordig ja, weet het.
Ik zal morgen die code eens opnieuw te schrijven, en ook een XMLHttpRequest laad methode uit te proberen wat die doet met cdata, heb XMLHttpRequest wel regelmatig gebruikt hoor, maar voor dit project leek me beter om de iframe manier te gebruiken.

Ik ken XMLHttpRequest wel ja, dit vermijd ik vanwege bepaalde browsers, om groter bereik te hebben met browsers, nu is dat veel groter om deze truc toe te passen.
Ik denk niet dat er iets anders van wordt eigelijk, maar zal eens uitproberen.


Maar op deze manier laadt ik inderdaad zo de gegevens uit de rss dat staat in een onzichtbaar iframe.
En XMLHttpRequest wordt er niet makkelijker op om de gegevens op te halen, moet je weer 2 manieren van ophalen hebben, want IE wil via ActiveXObject, en Mozilla en Opera via createDocument ...
Ben ermee bekend, maar nu is het veel simpeler:

var node = parent.frames[(hrefSub2b-1)].document.documentElement;

pakt frame x

nodeItems = node.getElementsByTagName("item").length;

Nu weet ik al aantal items in RSS

Ken jij kortere/simpeler manier? dat werkt in IE5-7 mozilla en opera (weet zo niet welke opera versies allemaal, 7 en 8 in iedergeval)


p.s. temptext=nodeItem.getElementsByTagName("description")[0].childNodes[a].data;
hiermee haal ik dus de tekst op.
(misschien andere manier dan data? zijn wel meer manieren namelijk, heb wel wat verschillende geprobeerd)

daarna verander ik nog wat met aantal tekens.

en dan met innerHTML stuur ik naar html toe.

[ Voor 13% gewijzigd door w3news op 26-09-2005 08:24 ]

Een beter internet begint bij jezelf...


  • w3news
  • Registratie: Mei 2004
  • Laatst online: 09-03 10:15
Probleem is opgelost, helemaal!
Zie b.v.
http://test.w3news.org/ajax2/index.html
Werkt vlekkeloos in IE, Firefox en Opera hier.
Denk inderdaad dat via iFrame niet wil, maar wel via XMLHttpRequest.

Dit is de JavaScript code, zo al wat netter dan eerst?
http://test.w3news.org/ajax2/test.js
Zit nog wel af en toe wat slordigheidjes in, en kan nog wel verder geoptimaliseerd worden, maar ik vindt het zo al een stuk beter.

Een beter internet begint bij jezelf...


  • crisp
  • Registratie: Februari 2000
  • Laatst online: 00:09

crisp

Devver

Pixelated

de data-property is vziw een synoniem voor nodeValue, maar ik denk dat de ingebouwde xml-parser van IE gewoon brak is. Via XMLHttpRequest heb ik nog geen problemen ondervonden in IE mbt CDATA-secties.

Intentionally left blank