xml
ik heb een playlist in xml en ik wil php toevoegen om het dynamisch te maken. ik heb het gezocht maar het kan andersom wel.
heeft iemand ervaring in het gebied van zo iest.
laat me aub weten en hoe
thanx
DOM kun je in PHP vrij eenvoudig XML aanmaken, bewerken en/of uitlezen.
Geen flauw idee wat je nu precies bedoelt, maar met $map = '../muziek/';
$query ="SELECT * FROM muziek ORDER BY id ";
$result = mysql_query($query) or die(mysql_error());
if(mysql_num_rows($result)) {
while($row = mysql_fetch_array($result)) {
$path = $row['path'];
$name = $row['name'];
$xml = "";
}
$xml .= "<xml>
<track>
<path>../muziek/You Dont Know.mp3</path>
<title>You Dont Know</title>
</track>";
header('Content-Type: application/xml; charset=ISO-8859-1');
echo "";
echo $xml;
echo "</xml>";
het bestand zelf moet in xml
charset=ISO-8859-1
encoding="UTF-8"
Wat mag het worden? Een paar bugs? Zou het niet handig zijn om gewoon één correcte character set op te geven?
Zie mijn link.
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
<?php
////////////////////////
////Frank van Asselt////
////////////////////////
////xml -> array 1.1////
////////////////////////
class xml{
public function generateArray($xml){
$dom = new DOMDocument;
$dom->load($xml);
return($this->_generateArray($dom->firstChild));
}
private function _generateArray($node){
$array = array();
//Indien er meerdere kinderen zijn
if($node->childNodes->length > 2){
foreach($node->childNodes as $child){
//Bepaal de kwantiteit van de tags van het kind
$nodeTags = $node->getElementsByTagName($child->nodeName);
$test = array();
foreach($nodeTags as $nodeTag){
if($nodeTag->parentNode->isSameNode($child->parentNode)){
array_push($test, $child->nodeName);
}
}
if(count($test) > 1){
if($child->nodeType != XML_TEXT_NODE){
//De tag van de kinderen komen meerdere malen voor (numeric)
if($child->childNodes->length > 2){
//De value is een array
$array[$node->nodeName][] = $this->_generateArray($child);
//print 'numeric: '.$node->nodeName.'<br />';
}
else{
//De value is geen array
$array[] = $child->nodeValue;
}
}
}
else{
if($child->nodeType != XML_TEXT_NODE){
//De tag van het kind komt 1 keer voor (assoc)
if($child->childNodes->length > 2){
//De value is een array
$array[$child->nodeName] = $this->_generateArray($child);
}
else{
//De value is geen array
$array[$child->nodeName] = $child->nodeValue;
}
}
}
}
}
else{
$array[$node->nodeName] = $node->nodeValue;
}
return $array;
}
}
$doc = new xml;
print '<pre>';
print_r($doc->generateArray('../xml/xml.xml'));
print '</pre>';
?>
////////////////////////
////Frank van Asselt////
////////////////////////
////xml -> array 1.1////
////////////////////////
class xml{
public function generateArray($xml){
$dom = new DOMDocument;
$dom->load($xml);
return($this->_generateArray($dom->firstChild));
}
private function _generateArray($node){
$array = array();
//Indien er meerdere kinderen zijn
if($node->childNodes->length > 2){
foreach($node->childNodes as $child){
//Bepaal de kwantiteit van de tags van het kind
$nodeTags = $node->getElementsByTagName($child->nodeName);
$test = array();
foreach($nodeTags as $nodeTag){
if($nodeTag->parentNode->isSameNode($child->parentNode)){
array_push($test, $child->nodeName);
}
}
if(count($test) > 1){
if($child->nodeType != XML_TEXT_NODE){
//De tag van de kinderen komen meerdere malen voor (numeric)
if($child->childNodes->length > 2){
//De value is een array
$array[$node->nodeName][] = $this->_generateArray($child);
//print 'numeric: '.$node->nodeName.'<br />';
}
else{
//De value is geen array
$array[] = $child->nodeValue;
}
}
}
else{
if($child->nodeType != XML_TEXT_NODE){
//De tag van het kind komt 1 keer voor (assoc)
if($child->childNodes->length > 2){
//De value is een array
$array[$child->nodeName] = $this->_generateArray($child);
}
else{
//De value is geen array
$array[$child->nodeName] = $child->nodeValue;
}
}
}
}
}
else{
$array[$node->nodeName] = $node->nodeValue;
}
return $array;
}
}
$doc = new xml;
print '<pre>';
print_r($doc->generateArray('../xml/xml.xml'));
print '</pre>';
?>
Gewijzigd op 30/12/2010 14:35:15 door Frank van Asselt
Het is een nobel streven om een topic na 2 jaar zo'n uitgebreid stuk code te geven. Hopelijk is het niet voor niets geweest. ;)
Iets valt me toch op.
Ik heb het niet grondig bekeken, het is meer een eerste spontane reactie.
Quote:
//Indien er meerdere kinderen zijn ...
Zou ik niet doen. Zelfs al krijg je maar 1 element, zou ik het mooi in een array zetten. Ik zou niet willen mijn hele php logica moeten aanpassen omdat er toevallig van een element maar 1 aanwezig is.
Kris Peeters op 30/12/2010 13:22:15:
Niet dat het nog wat uitmaakt voor de persoon die de vraag stelde...
Iets valt me toch op.
Ik heb het niet grondig bekeken, het is meer een eerste spontane reactie.
Zou ik niet doen. Zelfs al krijg je maar 1 element, zou ik het mooi in een array zetten. Ik zou niet willen mijn hele php logica moeten aanpassen omdat er toevallig van een element maar 1 aanwezig is.
Iets valt me toch op.
Ik heb het niet grondig bekeken, het is meer een eerste spontane reactie.
Quote:
//Indien er meerdere kinderen zijn ...
Zou ik niet doen. Zelfs al krijg je maar 1 element, zou ik het mooi in een array zetten. Ik zou niet willen mijn hele php logica moeten aanpassen omdat er toevallig van een element maar 1 aanwezig is.
Inderdaad, volgens mij is hij niet helemaal correct / logisch opgebouwd. En zoiets staat ook al op php.net:
book.dom#93717
Sowieso is XML veel krachtiger dan PHP arrays en gooi je dus altijd informatie weg, wanneer je het zo omzet. Gebruik gewoon een van de XML tools!
Pim - op 30/12/2010 14:17:50:
Sowieso is XML veel krachtiger dan PHP arrays en gooi je dus altijd informatie weg, wanneer je het zo omzet. Gebruik gewoon een van de XML tools!
Dat is zo. En sowieso kan je een xml document ook gewoon als array / object benaderen.
Dat verschild per situatie. Zelf werk ik het liefst met JSON (Javascript objecten to go:P) In dit geval ging het om de data van een auto/kenteken die middels curl als xml opgehaald wordt en was dit dus wel handig.
Moet je die hele array in json steken?
Indien dat niet het geval is, zou ik niet eerst van alles een array maken en dan daar nog eens in filteren
json_encode worden omgezet naar json: link.
Overigs kunnen bepaalde objecten gewoon met Ik bedoel ook niet dat ik van xml een array maak om er vervolgens json van te maken?!? Ik gaf slechts aan dat ik liever met JSON werk als met XML.
In het bovengenoemde geval kreeg ik telkens een klein XML bestandje terug welke ik voornamelijk serverside gebruikte. Het is wel handig als je data uit verschillende (externe)bronnen wilt samenvoegen om er 1 array van te maken die je zo met json_encode verstuurd.