[JS/XML/HTML] Direct content naar een iframe schrijven

Pagina: 1
Acties:

Acties:
  • 0 Henk 'm!

  • Bartjuh
  • Registratie: Oktober 2001
  • Niet online
Ik zit met een probleempje..
Ik heb een xml-object in javascript, en de inhoud wil op elk moment kunnen bekijken in me internet pagina. En dus ook met de opmaak zoals ie die van xml maakt (met de + en - drvoor enzo). Je kan wel dmv een iframe, een xml-bestand erin laden (de opmaakt blijft ook goed), maar ik wel een object (in het geheugen) er naar toe wegschrijven..

Maar hoe in godsnaam moet ik dat xml-object wegschrijven in de iframe zodat ik deze ten alle tijde kan bekijken?? Of een andere manier waarop dit te bewerkstelligen is?

objIFrame.innerHTML = objXML.xml werkt niet.
objIFrame.innerText = objXML.xml werkt ook niet.
objIFrame.src = objXML.xml werkt ook niet.

Acties:
  • 0 Henk 'm!

  • faabman
  • Registratie: Januari 2001
  • Laatst online: 08-08-2024
Wat is objIFrame??

toch wel zoiets als document.getElementById('id van je iframe').contentWindow.document neem ik aan??

Op zoek naar een baan als Coldfusion webdeveloper? Mail me!


Acties:
  • 0 Henk 'm!

  • Bartjuh
  • Registratie: Oktober 2001
  • Niet online
faabman schreef op dinsdag 01 februari 2005 @ 14:52:
Wat is objIFrame??

toch wel zoiets als document.getElementById('id van je iframe').contentWindow.document neem ik aan??
Neen ;)
zo: document.getElementById('id van je iframe').

Ik ben er overigens al bijna uit...

Ik krijg het als text erin, met en zonder tags.

document.getElementById('transaction').insertAdjacentHTML("beforeBegin", xmlCurrent.xml);

Maar ik krijg dus niet de goede xml-opmaak... :|

Acties:
  • 0 Henk 'm!

  • faabman
  • Registratie: Januari 2001
  • Laatst online: 08-08-2024
waarom doe je eigenlijk niet gewoon document.getElementById('transaction').src = 'xmlCurrent.xml' :?

Op zoek naar een baan als Coldfusion webdeveloper? Mail me!


Acties:
  • 0 Henk 'm!

  • Bartjuh
  • Registratie: Oktober 2001
  • Niet online
faabman schreef op dinsdag 01 februari 2005 @ 15:33:
waarom doe je eigenlijk niet gewoon document.getElementById('transaction').src = 'xmlCurrent.xml' :?
Omdat dat een verwijzing is naar een bestand. En deze xmlCurrent bestaat alleen in het geheugen :)

Acties:
  • 0 Henk 'm!

Anoniem: 14124

Wat is xml? Moet dat niet responseXML of responseText zijn? Voor de rest kan ik geen iframes beoordelen zonder code te zien.

Acties:
  • 0 Henk 'm!

  • Bartjuh
  • Registratie: Oktober 2001
  • Niet online
Anoniem: 14124 schreef op dinsdag 01 februari 2005 @ 16:08:
Wat is xml? Moet dat niet responseXML of responseText zijn? Voor de rest kan ik geen iframes beoordelen zonder code te zien.
Uitleg XML

responseText en responseXML zijn geen methoden/properties van een iframe. zie msdn

Ik kom er nog steeds niet uit... :(

Acties:
  • 0 Henk 'm!

Anoniem: 14124

Wellicht moet je eens kijken naar mijn xml driven domscripting (Clay-Disclaimer) menu, of mijn xml driven domscripting (Clay-Disclaimer) treeview. Maar bedankt voor het linkje :)
responseText en responseXML zijn geen methoden/properties van een iframe. zie msdn
Ik kom er nog steeds niet uit... :(
Bravo, nee niet van het iframe maar wel van een XML object. En om de content van een XML object uit te lezen heb je de beschikking over oa responseXML, en responseText. Beiden beschreven in de MSDN, onder xml dom.

En nog steeds, mis ik een stukje code. Dit is gewoon als pissen in het donker met tegenwind.

[ Voor 7% gewijzigd door Anoniem: 14124 op 01-02-2005 16:56 ]


Acties:
  • 0 Henk 'm!

  • faabman
  • Registratie: Januari 2001
  • Laatst online: 08-08-2024
Anoniem: 14124 schreef op dinsdag 01 februari 2005 @ 16:54:
Bravo, nee niet van het iframe maar wel van een XML object. En om de content van een XML object uit te lezen heb je de beschikking over oa responseXML, en responseText. Beiden beschreven in de MSDN, onder xml dom.

En nog steeds, mis ik een stukje code. Dit is gewoon als pissen in het donker met tegenwind.
bedoel je niet de content van een httprequest object :? de content van een xml document object kun je afaik niet uitlezen met responseText en responseXML :? en de TS zal nu wel helemaal niet meer weten waar het over gaat :P

Op zoek naar een baan als Coldfusion webdeveloper? Mail me!


Acties:
  • 0 Henk 'm!

Anoniem: 14124

Ik ga nu inderdaad uit dat hij netjes via MSXML of een XmlhttpRequest() een object heeft aangemaakt, en daar de XML in bewaart :)

Voor +/- zul je het denk ik echt moeten transformeren met een XSLT. De default XSLT zit in MSXML.DLL met de URN res://msxml.dll/DEFAULTSS.xsl of res://msxml3.dll/DEFAULTSS.xsl.

Je kunt de XSLT ook in je browser bekijken, door de URN aan te roepen in je addressbar.

Voor de transformatie zou je dan het volgende kunnen proberen

var xmlsource = new ActiveXObject("Msxml2.DOMDocument.4.0");
xmlsource.async = false;
xmlsource.load("source.xml");

var xslt= new ActiveXObject("Msxml2.DOMDocument.4.0");
xslt.async = false;
xslt.load("res://msxml.dll/DEFAULTSS.xsl");

//transformeren
mijnframe.innerHTML = xmlsource.transformNode(xslt);

[ Voor 95% gewijzigd door Anoniem: 14124 op 01-02-2005 17:39 ]


Acties:
  • 0 Henk 'm!

  • Genoil
  • Registratie: Maart 2000
  • Laatst online: 12-11-2023
Ik kan me herinneren dat er bij Apache Cocoon een xml2html.xsl zat die er - omdat je dat destijds nog niet had op Mozilla - voor was om zo'n +/- view serverside als HTML te genereren. Maar dat ding is natuurlijk ook heel bruikbaar voor het doel dat jij nastreeft, plus dat je em kunt customizen met je eigen stylesheet.

oh hier iemand anders met zo'n geval:
http://www.linkwerk.com/pub/xml/xml2html/xml2html.xslt

[ Voor 13% gewijzigd door Genoil op 01-02-2005 20:01 ]


Acties:
  • 0 Henk 'm!

  • Bartjuh
  • Registratie: Oktober 2001
  • Niet online
Anoniem: 14124 schreef op dinsdag 01 februari 2005 @ 17:29:
Voor +/- zul je het denk ik echt moeten transformeren met een XSLT. De default XSLT zit in MSXML.DLL met de URN res://msxml.dll/DEFAULTSS.xsl of res://msxml3.dll/DEFAULTSS.xsl.
Zoiets verwachte ik al, dat ie een standaard xsl sheet gebruikt om het xmldoc op te maken. Maar ik ga het gelijk proberen! bedankt voor de tip :Y)

edit:
als ik een xslt object aanmaak, die transform, dan krijg ik de volgende fout:
"The stylesheet does not contain a documentelement. The stylesheet may be empty, or it may not be a well-formed XML document."
(bij bijde xslt-sheets. Ik kan ze overigens bijde in de browser bekijken.. :? )

De code:
objIFrame = document.getElementById('transaction');

var xslDef = new ActiveXObject("Microsoft.XMLDOM");
xslDef.async = false;
xslDef.load('res://msxml3.dll/DEFAULTSS.xsl');

source = xmlCurrent.transformNode(xslDef);

objIFrame.insertAdjacentHTML("beforeBegin", source);

---------------------------------------------------
Dit is de manier waarop ik de objecten aanmaak:

Globale variabelen:
var xslRef = new ActiveXObject("Microsoft.XMLDOM");
var xmlCurrent = new ActiveXObject("Microsoft.XMLDOM");


Als de xml wordt geladen, er zijn 2 xml documenten. Eéntje waar niets in wordt gewijzigd (xmlRef), en een waar dingen in 'runtime' worden gewijzigd (xmlCurrent).

xmlRef.async = false;
xmlRef.load('temporary.xml');

xmlCurrent.async = false;
xmlCurrent.load(xmlRef);

Ik maak trouwens ook gebruik van xslt om html output te genereren met het xml object, maar dat is hier niet van toepassing.

Nou krijg ik met deze functie de xml wel als 'plain text' (incl tags ed) in het iframe:

objIFrame = document.getElementById('transaction');

objIFrame.insertAdjacentText("beforeBegin", xmlCurrent.xml);

Met deze functie krijg ik alleen de textnodes binnen de xml te zien:

objIFrame = document.getElementById('transaction');

objIFrame.insertAdjacentText("beforeBegin", xmlCurrent.xml);


Maar het probleem is dat ik nooit de 'xml-opmaak' krijg die explorer normaal altijd toont bij een xml document. Als je een xml-file direct laad in het iframe met het 'src' attrbuut doet het iframe dit wel!

Ik maak overigens geen gebruikt van httprequests in me code.

[ Voor 40% gewijzigd door Bartjuh op 02-02-2005 09:26 ]


Acties:
  • 0 Henk 'm!

  • Bartjuh
  • Registratie: Oktober 2001
  • Niet online
Anoniem: 14124 schreef op dinsdag 01 februari 2005 @ 16:54:
Bravo, nee niet van het iframe maar wel van een XML object. En om de content van een XML object uit te lezen heb je de beschikking over oa responseXML, en responseText. Beiden beschreven in de MSDN, onder xml dom.
Bijde geprobeerd, maar hij geeft alleen 'undefined' terug.

Acties:
  • 0 Henk 'm!

Anoniem: 14124

Bartjuh schreef op woensdag 02 februari 2005 @ 09:31:
[...]

Bijde geprobeerd, maar hij geeft alleen 'undefined' terug.
Heb je al geprobeerd om je object te transfomeren? Dus direct op het object. En als dat niet werkt direct op jeobject.xml :)

En wat gebeurt er als je je string parsed naar een echt XML document, dit werkt alleen onder Mozilla.

var xmlObject = (new DOMParser()).parseFromString(mijnXMLstring, "text/xml");


En voor IE moet je dus eerst een MSXML object creeren, die je gaat voeden met je XML string.

var xmlDoc = XmlDocument.create();
xmlDoc.loadXML(sText);

Waarbij XmlDocument dus je ActiveX object is :)

[ Voor 52% gewijzigd door Anoniem: 14124 op 02-02-2005 09:51 ]


Acties:
  • 0 Henk 'm!

  • Bartjuh
  • Registratie: Oktober 2001
  • Niet online
Anoniem: 14124 schreef op woensdag 02 februari 2005 @ 09:46:
[...]
Heb je al geprobeerd om je object te transfomeren? Dus direct op het object. En als dat niet werkt direct op jeobject.xml :)
Je bedoelt transformeren dmv de defualt xslt stylesheet? Ja, werkt nie..
En xmlObject.xml , de xml propertie geeft dan het gehele document terug als text inclusief alle nodes ed.


En wat gebeurt er als je je string parsed naar een echt XML document, dit werkt alleen onder Mozilla.

var xmlObject = (new DOMParser()).parseFromString(mijnXMLstring, "text/xml");


En voor IE moet je dus eerst een MSXML object creeren, die je gaat voeden met je XML string.

var xmlDoc = XmlDocument.create();
xmlDoc.loadXML(sText);

Waarbij XmlDocument dus je ActiveX object is :)
Wanneer ik dit doe:
XmlDocument = new ActiveXObject("Microsoft.XMLDOM");
xmlDoc = XmlDocument.create();
xmlDoc.loadXML(xmlCurrent.xml);

Kent hij de functie 'create' niet van het XmlDocument object...
Het probleem is denk ik niet zozeer dat ik de xml in het iframe krijg, alleen hij interpreteert het niet als xml ofzo, en maakt het dus ook niet op.

Dit werkt overigens ook om de xml erin te krijgen:
objIFrame1.outerText = xmlCurrent.xml;
objIFrame1.outerHTML = xmlCurrent.xml;

Voor outerHTML geld weer dat je alleen de textnodes binnen xml te zien krijgt, en voor outerText geld weer dat je alles te zien krijgt.

edit: de tweede keer dat ie dat uitvoert geeft overigens een error aan, hij vind het object niet meer? Heb ik dat overschreven met outerHTML ofzo :?

edit2: Ja dus, dom van me |:(
"When the property is set, the given string completely replaces the object, including its start and end tags."

[ Voor 13% gewijzigd door Bartjuh op 02-02-2005 11:35 ]


Acties:
  • 0 Henk 'm!

Anoniem: 14124

Je moet het ook echt creeren als xml object, en niet als een string. :)

En create is puur een eigen wrapper method om bugs in Mozilla te patchen. Dus je kunt gewoon simpel bijv. dit doen

xmlDoc = new ActiveXObject("Microsoft.XMLDOM");
xmlDoc.loadXML(xml);

[ Voor 58% gewijzigd door Anoniem: 14124 op 02-02-2005 15:48 ]

Pagina: 1