hallo

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
Geen flauw idee wat je nu precies bedoelt, maar met DOM kun je in PHP vrij eenvoudig XML aanmaken, bewerken en/of uitlezen.
include ("inc_connect_mysql.php");

$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 "<?xml version="1.0" encoding="UTF-8"?>";
echo $xml;
echo "</xml>";

het bestand zelf moet in xml

Offtopic:
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?
Indien je simpelweg een array van alle (xml) nodes wilt genereren moet het hiermee wel lukken, success:P

<?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>';

?>
Toegeven..
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. ;)
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.


//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.


//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:
[php]book.dom#93717[/php]
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!

Reageren