xml do html, wyswietlanie obu wartosci z dwoch tagow o tej samej nazwie z xml w jednej komorce taeli

0

Witam, bawie sie w pewien projekt bo programowaniem tego nazwac nie mozna.

Mam dane w pliku .xml ktore przetwarzam do html za pomoca kodu ktory udalo mi sie jakims cudem nabazgrac.
Znalazlem sposob na wpisywanie do tabeli myslnika w przypadku gdy nie ma danych w .xml w odpowiednim miejscu no i wyswietlanie normalnie danych w przypadku kiedy one tam sa.
Moj problem polega na tym ze nie potrafie przerobic odpowiednio kodu tak aby wyswietlal on kilka wartosci z kilku lini .xml o tym samym tagu (GGC) w jednej komorce tabeli.
Prosze o pomoc, jestem zielony i kod udalo mi sie napisac doslownie cudem xD

0

khe?!
Nie jestem pewien, czy dobrze zrozumiałem o czym piszesz, ale czy Tobie nie chodziło o coś takiego:

 var ggc = x[i].getElementsByTagName("GGC")[0];
                  if (ggc.hasChildNodes()) {
                        document.write("<a href='http://www.ggc-stream.net/search/server/guid/gid/");
                        document.write(x[i].getElementsByTagName("GGC")[0].childNodes[0].nodeValue);
                        document.write("' target='_blank'>/guid/gid/");
                        document.write(x[i].getElementsByTagName("GGC")[0].childNodes[0].nodeValue);
                        document.write("</a>");
                        
                        }
                        document.write("<a href='http://www.ggc-stream.net/search/server/guid/gid/");
                        document.write(x[i].getElementsByTagName("GGC")[0].nodeValue);
                        document.write("' target='_blank'>/guid/gid/");
                        document.write(x[i].getElementsByTagName("GGC")[0].nodeValue);
                        document.write("</a>");
                        document.write("-");
                        document.write("</td><td>");

Dostosowałem do tego, co sam naskrobałeś, ale ten kod jest naprawdę tragiczny.

0
Ola Nordmann napisał(a):

Dostosowałem do tego, co sam naskrobałeś, ale ten kod jest naprawdę tragiczny.

Wiesz to jest tak jakbyś chciał coś zrobić ale nie miał o tym zielonego pojęcia i bazował jedynie na google :), wybacz.

Spróbujmy jeszcze raz.
Mam plik .xml

Jak widzicie są w nim dwie pozycje z tagiem GGC z różnymi wartościami.

Chcę aby ten kod przerobić tak, aby wyświetlał wartości z obu otagowanych tak samo elementów (<ggc>) w jednej komórce tabeli w htmlu.

Mimo tego, że kod jest "tragiczny" to w chwili obecnej przetwarza on plik .xml w taki sposób aby w przypadku braku wartościu w tagu <GGC> wstawiał "-" do tabelki w htmlu a jeżeli tag <GGC> nie jest pusty to wyświetla jego wartość i go linkuje. Natomiast nie wiem jak zrobić aby wyświetlał wszystkie wartości z kilku tych samych tagów w pliku .xml.

1

Wiesz to jest tak jakbyś chciał coś zrobić ale nie miał o tym zielonego pojęcia i bazował jedynie na google

Mam wrażenie, że większość z nas wszystko (większość) wiedzy jaką posiadła zawdzięcza Google ;]

Coś takiego?:

var ggc = x[i].getElementsByTagName("GGC");
if (ggc.length) {
  for (var j=0; j<ggc.length; j++) {
    document.write("<a href='http://www.ggc-stream.net/search/server/guid/gid/");
    document.write(ggc[j].childNodes[0].nodeValue);
    document.write("' target='_blank'>/guid/gid/");
    document.write(ggc[j].childNodes[0].nodeValue);
    document.write("</a><br />");
  }
}
else {
  document.write("-");
 }
document.write("</td><td>");

pisane na ślepo, więc mogą być bugi.

generalnie oganąłeś już poruszanie się po liście elementów, na co wskazuje:

 var x=xmlDoc.getElementsByTagName("Bans");
                for (i=0;i<x.length;i++)

więc nie wiem skąd ten problem jak tu masz dokładnie to samo

2

Widzisz... Zwiódł mnie ten Twój [TAB] przy GCC. Jak spojrzałem na ten kod, to postanowiłem przeczytać tylko najważniejszy fragment.

Ale ten kod jest świetny :) Będę nim straszył dzieci.

var ggc = x[i].getElementsByTagName("GGC");
if (ggc.length) {
   	for (var j=0; j<ggc.length; j++) {
		const curItem = ggc[j].childNodes[0].nodeValue;
		document.write('<a href="http://www.ggc-stream.net/search/server/guid/gid' + curItem  + '" target="_blank">/guid/gid/' + curItem + '</a><br />');

		//tudzież przez wzgląd na szerokość linii:
		//document.write('<a href="http://www.ggc-stream.net/search/server/guid/gid' + curItem  + '" target="_blank">\
		//			     /guid/gid/' + curItem + '</a><br />');
	}
}
else {
	document.write( "-" );
}
document.write("</td><td>");
0

@Ola Nordmann
Dobrze, że chociaż mój przypadek niektórych cieszy x-D.

Użyłem poprawionego kodu od użytkownika dzek69, działa poprawnie z tym że gdy tag GGC jest pusty nie wstawia do tabeli na stronie znaku "-" tylko tak jakby przeskakiwał i nie kończył reszty. Pomysły ?
Jak to wygląda na żywo - http://bfhcn.uhostall.com/banlist/

Dzięki za wyrozumiałość Panowie, wiem że nie jest łatwo ^^.

1
var ggc = x[i].getElementsByTagName("GGC");
var value = false;

  for (var j=0; j<ggc.length; j++) {
    if( gcc[j].childNodes[0].nodeValue.length ) continue;

    value = true;
    document.write("<a href='http://www.ggc-stream.net/search/server/guid/gid/");
    document.write(ggc[j].childNodes[0].nodeValue);
    document.write("' target='_blank'>/guid/gid/");
    document.write(ggc[j].childNodes[0].nodeValue);
    document.write("</a><br />");
  }

if( !value ) {
  document.write("-");
 }
document.write("</td><td>");
0

Nie wiem dlaczego ale nie działa, nie wyświetla zarówno jeśli coś jest w tagu a także jeśli nic tam nie ma.
Myślałem myślałem i za przeproszeniem kupe wymyśliłem.. eh, jak macie jeszcze checi i czas to zerknijcie moze cos wam przyjdzie do glowy.
Dobrego wieczoru.

1

@Ola Nordmann też z palca pisał widzę. Poprawione i przetestowane:

var ggc = x[i].getElementsByTagName("GGC");
        var value = false;

        for (var j=0; j<ggc.length; j++) {
            if( !ggc[j].childNodes.length ) continue;

            value = true;
            document.write("<a href='http://www.ggc-stream.net/search/server/guid/gid/");
            document.write(ggc[j].childNodes[0].nodeValue);
            document.write("' target='_blank'>/guid/gid/");
            document.write(ggc[j].childNodes[0].nodeValue);
            document.write("</a><br />");
        }

        if( !value ) {
            document.write("-");
        }
        document.write("</td><td>");
0

Dzieki serdeczne panowie za cierpliwość :P wszystko działa a co najważniejsze trochę się nauczyłem próbując samemu się w tym połapać
Wszystkiego dobrego i mam nadzieję, że nie będziecie musieli więcej się ze mną męczyć :D

0
<script>
				if (window.XMLHttpRequest) {
				  xmlhttp=new XMLHttpRequest();
				  }
				else {
				  xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
				  }
				  
				xmlhttp.open("GET","test.xml",false); 
				xmlhttp.send();
				xmlDoc=xmlhttp.responseXML; 

				var x=xmlDoc.getElementsByTagName("record"); 
				for (i=0;i<x.length;i++) { 
				  document.write("<tr><td>");
				  document.write(x[i].getElementsByTagName("IP")[0].childNodes[0].nodeValue);
				  document.write("</td></tr>");
				}
			</script>	

Jeszcze raz ja.. niestety.
Pobieram adres IP zapisany w pliku .xml ale chce nieco zmodyfikować ten kod aby zamiast pełnego adresu IP wyświetlało w tabeli tylko jego część a resztę gwiazdkowało, coś takiego 344.435...
Nie mam kompletnie pojęcia jak to zrobić :(.

0

wyrażenia regularne

btw: skoro wczytujesz plik ajaxem - to każdy do niego ma dostęp i może zobaczyć pełne IP. po co je tak ukrywasz, skoro to takie pseudoukrywanie czegoś?

0

a nie da sie zrobic jakos tak zeby wczytywalo i wyswietlalo z gwiazdkami ale jak ktos chcialby podejrzec plik zrodlowy to nie mialby takich praw?

0

nie. możesz jedynie po stronie serwera maskować plik, tak żeby już zamaskowany się odbierało.

WSZYSTKO co leci między przeglądarką a serwerem user może łatwo podejrzeć.

0

Poczytałem troszkę i przerobiłem tamtą babraninę na php. Myślę, że i wygląda i działa lepiej :P ale wciąż pewnie nie ustrzegłem się błędów dlatego zostawiam kod dla potomnych i jak są jakieś ale to z chęcią wysłucham i czegoś jeszcze się nauczę.

 
<?php
	$file = "clientlist.xml";
	$xml = simplexml_load_file($file) or die ("no load");
	foreach($xml->client as $client){
		echo "<tbody>";
		echo "<tr>";
		echo "<td>{$client->Name}</td>";
		echo "<td>{$client->ID}</td>";
		echo "<td>";
		if ($client->IP==0) {
			echo "-";
		}
		else {
			$ip = $client->IP;
			echo preg_replace('/(?!\d{1,3}\.\d{1,3}\.)\d/', '*', $ip);
		}
		echo "</td>";
		echo "<td>";
		foreach($client->Country as $country){
			if ($client->Country==0) {
				echo "-";
			}
			else {
				echo $country[0] . '<br/>';
			}
		}
		echo "</td>";
		echo "</tr>";
		echo "</tbody>";
	}
	echo "</table>";
	?>
1

czy przy takim kodzie moge jakos ukryc pelne ip wczytywane z xmla czy to wciaz nie ma sensu ?

ma sens, ale zablokuj dostęp do tego pliku xml (np. poprzez htaccess, wrzuć go do jakiegoś folderu "zablokowane" i w tym folderze utwórz plik ".htaccess" (samo rozszerzenie, bez nazwy) o treści deny from all - wtedy folder będzie niedostępny z poziomu przeglądarki, ale dostępny dla skryptów php)

0

a czemu jak wrzucam analogiczną pętle dla ID i IP to nie działa tylko wyświetla kreski tak jakby tag był pusty mimo że nie jest

<?php
	$file = "topsecret/clientlist.xml";
	$xml = simplexml_load_file($file) or die ("no load");
	echo "<tbody>";
	foreach($xml->client as $client){
		echo "<tr>";
		echo "<td>";
		foreach($client->Name as $name){
			if ($client->Name==0) {
				echo "-";
			}
			else {
				echo $name[0] . '<br/>';
			}
		}
		echo "</td>";
		echo "<td>{$client->ID}</td>";
		echo "<td>";
		if ($client->IP==0) {
			echo "-";
		}
		else {
			echo preg_replace('/(?!\d{1,3}\.\d{1,3}\.)\d/', '*', $client->IP);
		}
		echo "</td>";
		echo "<td>";
		foreach($client->Country as $country){
			if ($client->Country==0) {
				echo "-";
			}
			else {
				echo $country[0] . '<br/>';
			}
		}
		echo "</td>";
		echo "</tr>";
	}
	echo "</tbody>";
	echo "</table>";
	?>
 
0

nie wiem co masz w tym XML więc ciężko pomóc. ogarnij duże/małe litery. i zrób sobie var_dump($client) to się dowiesz co masz dostępne

0
dzek69 napisał(a):

nie wiem co masz w tym XML więc ciężko pomóc. ogarnij duże/małe litery. i zrób sobie var_dump($client) to się dowiesz co masz dostępne

omg, od razu mnie oswiecilo.. zle porownywalem co jest w xml, wystarczylo zmienic na

 
foreach($client->names as $name){
			if ($client->names == '') {
				echo "-";
			}
			else {
				echo $name[0] . '<br/>';
			}

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