[JS] Childnodes i wyświetlanie całego drzewa

0

Mam problem. Chciałbym w polu text area wyświetlić całe poddrzewo dokumentu xml. Szukam potrzebnej funkcji ale nie mogę znaleźć. Z moich kombinacji też nic nie wynika :/ Oto najprostsza postać kodu:

<html>
<body>
<script type="text/javascript">
function wytnijXML()
{
	var xmlstring = '<?xml version="1.0"?>\
		<root>\
			<tab1>\
				<row>\
					<cell>kom11</cell>\
					<cell>kom12</cell>\
					<cell>kom13</cell>\
				</row>\
				<row>\
					<cell>kom21</cell>\
					<cell>kom22</cell>\
					<cell>kom23</cell>\
				</row>\
			</tab1>\
			<tab2>\
				<row>\
					<cell>kom1</cell>\
					<cell>kom2</cell>\
					<cell>kom3</cell>\
				</row>\
			</tab2>\
		</root>';

	var xmlobject = (new DOMParser()).parseFromString(xmlstring, "text/xml");
	var root = xmlobject.getElementsByTagName('root')[0];
	
	//teraz chce wyświetlić ale tego typu rzeczy nie działają
	document.formularz.textarea.value=root.childNodes[1];
}
</script>
<body>

<FORM name="formularz">
<table>
<tr><td>
<input type=button value=ok onclick="wytnijXML()"></td></tr>
<tr><td><TEXTAREA NAME="textarea" rows=50 cols=30></TEXTAREA></td></tr>
</table>
</FORM>

</body>

</html>

Teraz po naciśnięciu przycisku chce aby w text area pojawilo się całe poddrzewo które jest obecnie w root.childNodes[1] czyli wszystko co znajduje się między znacznikami <tab1></tab1> z nimi włącznie.
Czy jest jakiś prosty sposób na wyświetlenie tego? Bo przelatywanie całego drzewa i wyświetlanie wszystkiego po kolei nie wchodzi w grę bo plik xml jest zbyt duży i za bardzo muli kompa.

0

(new XMLSerializer()).serializeToString(root.childNodes[1])

0

Wielkie dzięki. Właśnie o to chodziło ;)

--

Czemu jak teraz przesyłam ta text area do nowej strony i probuje otworzyć ten tekst jako xml to wyświetla mi błędy?
Tak otwieram:
$plik = simplexml_load_file($_POST['textarea']);

A błędy to:
Warning: simplexml_load_file() [function.simplexml-load-file]: I/O warning : failed to load external entity "<tab1> <row> <cell>kom11</cell> <cell>kom12</cell> <cell>kom13</cell> </row> <row> <cell>kom21</cell> <cell>kom22</cell> <cell>kom23</cell> </row> </tab1>" in /home/k/o/n/konradkojak/www/xml2/str2.php on line 7

0

...a może do simplexml_load_file (jak sama nazwa wskazuje) trzeba podać ścieżkę do pliku (który zawiera XML) a nie wpychać jako pierwszy argument to, co mogłoby być raczej jego zawartością ;)

proponuję skorzystać z simplexml_load_string

0

Zrobiłem tak i działa ale przedtem mi to nie chciało działać ;p

$fp = fopen("baza.xml", "w+");
	flock($fp, 2);
	fwrite($fp, $_POST['textarea']);
	flock($fp, 3);
	fclose($fp); 

	$plik = simplexml_load_file("baza.xml");
	echo $plik->row[0]->cell[0];

To powinno być:
$plik = simplexml_load_string($_POST['textarea']);
Mój błąd. Dzieki ;)

1 użytkowników online, w tym zalogowanych: 0, gości: 1