OK, men det tog altså en smule tid at konstruere et eksempel for det skulle også gerne give lidt mening.
Her er html dokumentet:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "
http://www.w3.org/TR/html4/loose.dtd"><html>
<head> <title>Untitled</title>
<script type="text/javascript">
if (window.Document) {
Document.prototype.loadXML = function (s) {
var doc2 = (new DOMParser()).parseFromString(s, "text/xml"); // Dan parser
while (this.hasChildNodes()) this.removeChild(this.lastChild); // Tøm dokument
for (var i = 0; i < doc2.childNodes.length; i++) {
this.appendChild(this.importNode(doc2.childNodes[i], true)); // Importér
}
}
function processXML(doc) {
// Gør noget med den xml vi har modtaget
alert(doc.childNodes);
}
function stream(url,rootEndNode) {
var _line,_buffer,_temp,_doc;
_buffer = new java.io.BufferedReader(new java.io.InputStreamReader(new java.net.URL(url).openStream()));
while(_line = _buffer.readLine()) {
// Denne while løkke vil køre så længe InputStream'en bliver ved med at sende bytes.
// Bemærk at javascript ikke understøtter tråde så scriptet vil sandsyneligvis "hænge"
// hvis serveren bliver ved med at sende uendeligt.
_temp += _line;
if (_line.indexOf(rootEndNode)!=-1) {
// Vi har modtaget </root> og har dermed modtaget en xml pakke
if (document.implementation && document.implementation.createDocument) {
_doc = document.implementation.createDocument("", "", null);
_doc.loadXML(_temp);
processXML(_doc);
} else {
// Kan ikke danne et Xml dokument. Gør intet.
}
_temp="";
}
}
}
stream("
file:///H|/codestore/xml/xmlextras/test.xml","</treeroot>");
}
</script>
</head>
<body></body>
</html>
I eksemplet antages streamen at sende XML dokumenter. Jeg gad ikke rigtig sætte en server side op til at spytte xml dokumenter ud, så jeg lavede bare en fil med tre simple xml sider i.
test.xml:
<?xml version="1.0" encoding="utf-8"?>
<!-- Comment -->
<treeroot>
<tree text="Root" icon="webfxicon.png" action="/" />
<tree text="Articles">
<tree text="Widgets" src="widgets.xml" />
<tree text="XTree" action="/dhtml/xtree/" />
<tree text="Test <>"&" src="tree1.xml" action="java script:alert(1)" />
</tree>
<tree text="Another Item" action="java script:alert(2)" />
<![CDATA[
CDATA section text
]]>
</treeroot>
<?xml version="1.0" encoding="utf-8"?>
<!-- Comment -->
<treeroot>
<tree text="Root" icon="webfxicon.png" action="/" />
<tree text="Articles">
<tree text="Widgets" src="widgets.xml" />
<tree text="XTree" action="/dhtml/xtree/" />
<tree text="Test <>"&" src="tree1.xml" action="java script:alert(1)" />
</tree>
<tree text="Another Item" action="java script:alert(2)" />
<![CDATA[
CDATA section text
]]>
</treeroot>
<?xml version="1.0" encoding="utf-8"?>
<!-- Comment -->
<treeroot>
<tree text="Root" icon="webfxicon.png" action="/" />
<tree text="Articles">
<tree text="Widgets" src="widgets.xml" />
<tree text="XTree" action="/dhtml/xtree/" />
<tree text="Test <>"&" src="tree1.xml" action="java script:alert(1)" />
</tree>
<tree text="Another Item" action="java script:alert(2)" />
<![CDATA[
CDATA section text
]]>
</treeroot>
Testet i NS7. Den spytter pænt tre XML dokumenter ud.
Jeg er klar over at dette ikke lever op til dine kompatibilitets-krav, men du spurgte. Jeg er ligeledes klar over at dette eksempel sender "færdige" dokumenter igennem, men det er udelukkende af hensyn til kontrol. Det hele bunder i hvad man anbringer i while løkken.
AFAIK kan man ikke lave parallel programmering i Javascript, så mens while løkken kører vil eksekveringen af resten af scriptet ikke fortsætte.
Håber ikke det her er ren volapyk.