PHP en XML
IK heb een fotoalbum die de mappen uitleest geschreven, maar als ik daar nu comment wil bij plaatsen moet ik naar een database gaan schrijven of iets dergelijks, om dat allemaal bij te houden. Nu ik al redelijk wat heb gelezen over xml dan is het net de bedoeling om niet beveiligde gegevens in xml files op te slaan ipv een database en comment bij foto's is echt niet belangrijk, dus denk ik dat een xml file tochwel de beste oplossing is.
Nu zit ik met het probleem dat ik niet weet welke klassen er in php bestaan om xml files uit te lezen en misschien kunnen jullie me helpen. Ik werk met een php 5.0 server
Wat zijn de beste oplossingen om data uit en in xml files te steken en welk idee zit erachter?
Alvast bedankt!
Jelle
Lekker DOM doen
of SimpleXML
of SimpleXML
welkeen is makkelijkst in gebruik en makkelijkst over te dragen naar bv java of vb.net omdat ik volop bezig ben met deze talen in school
Gewijzigd op 01/01/1970 01:00:00 door Jelle -
Het heeft functies als getObjectById, .... en is er idd. ook voor JavaScript maar ook voor PHP.
Hier een voorbeeldje van een systeem waarmee ik bezig ben. Het kleed HTML bestanden uit.
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
75
76
77
78
79
80
81
82
83
84
85
86
87
88
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
75
76
77
78
79
80
81
82
83
84
85
86
87
88
<?php
# ---------------------------------------------------------------------------------
# | DTC - Document & Template Class |
# ---------------------------------------------------------------------------------
# | Webmakerij |
# | versie 1.0.0 - november 2006 |
# | Licentie: GNU/GPL, http://www.gnu.org/licenses/gpl.html |
# ---------------------------------------------------------------------------------
# | Ontwikkeld voor: PHP 5 |
# | Getest op: PHP 5.1.4 |
# | Ontwikkeld met: SciTE 1.70 |
# ---------------------------------------------------------------------------------
class classDTC
{
# DOM variabelen
var $dom;
# Contructor, geef het te openen bestand op, eventueel een contenttype
# -----------------------------------------------------------------------------
function __construct($bronbestand, $contenttype = 'iso-8859-1')
{
$this->dom = new DOMDocument('1.0', $contenttype);
$this->dom->loadHTMLFile($bronbestand);
return true;
}
# Haal document titel op
# -----------------------------------------------------------------------------
function getTitel()
{
$titeltag = $this->dom->getElementsByTagName('title');
if ($titeltag->length != 0)
{
return $titeltag->item(0)->nodeValue;
}
else
{
return false;
}
}
# Haal meta data op
# -----------------------------------------------------------------------------
function getMetaData($httpequiv = true)
{
$metatags = $this->dom->getElementsByTagName('meta');
for ($i = 0; $i <= ($metatags->length -1); $i++)
{
if ($metatags->item($i)->getAttribute('name'))
{
$meta[$metatags->item($i)->getAttribute('name')] = $metatags->item($i)->getAttribute('content');
}
elseif ($metatags->item($i)->getAttribute('http-equiv') AND $httpequiv == true)
{
$meta[$metatags->item($i)->getAttribute('http-equiv')] = $metatags->item($i)->getAttribute('content');
}
}
return $meta;
}
# Haal alles uit de body op
# -----------------------------------------------------------------------------
function getbody()
{
$body = $this->dom->getElementsByTagName('body');
$bodycontent = $body->item(0)->getElementsByTagName('*');
$output = "";
for ($i = 0; $i <= ($bodycontent->length -1); $i++)
{
if ($bodycontent->item($i)->hasAttributes() == false)
{
$output .= '<' . $bodycontent->item($i)->tagName . '>';
}
else
{
$attributen = $bodycontent->item($i)->getAttribute('*');
$output .= '<' . $bodycontent->item($i)->tagName . ' ' . $attributen . '>';
}
$output .= $bodycontent->item($i)->nodeValue;
$output .= '</' . $bodycontent->item($i)->tagName . ">\r\n";
}
return $output;
}
}
?>
# ---------------------------------------------------------------------------------
# | DTC - Document & Template Class |
# ---------------------------------------------------------------------------------
# | Webmakerij |
# | versie 1.0.0 - november 2006 |
# | Licentie: GNU/GPL, http://www.gnu.org/licenses/gpl.html |
# ---------------------------------------------------------------------------------
# | Ontwikkeld voor: PHP 5 |
# | Getest op: PHP 5.1.4 |
# | Ontwikkeld met: SciTE 1.70 |
# ---------------------------------------------------------------------------------
class classDTC
{
# DOM variabelen
var $dom;
# Contructor, geef het te openen bestand op, eventueel een contenttype
# -----------------------------------------------------------------------------
function __construct($bronbestand, $contenttype = 'iso-8859-1')
{
$this->dom = new DOMDocument('1.0', $contenttype);
$this->dom->loadHTMLFile($bronbestand);
return true;
}
# Haal document titel op
# -----------------------------------------------------------------------------
function getTitel()
{
$titeltag = $this->dom->getElementsByTagName('title');
if ($titeltag->length != 0)
{
return $titeltag->item(0)->nodeValue;
}
else
{
return false;
}
}
# Haal meta data op
# -----------------------------------------------------------------------------
function getMetaData($httpequiv = true)
{
$metatags = $this->dom->getElementsByTagName('meta');
for ($i = 0; $i <= ($metatags->length -1); $i++)
{
if ($metatags->item($i)->getAttribute('name'))
{
$meta[$metatags->item($i)->getAttribute('name')] = $metatags->item($i)->getAttribute('content');
}
elseif ($metatags->item($i)->getAttribute('http-equiv') AND $httpequiv == true)
{
$meta[$metatags->item($i)->getAttribute('http-equiv')] = $metatags->item($i)->getAttribute('content');
}
}
return $meta;
}
# Haal alles uit de body op
# -----------------------------------------------------------------------------
function getbody()
{
$body = $this->dom->getElementsByTagName('body');
$bodycontent = $body->item(0)->getElementsByTagName('*');
$output = "";
for ($i = 0; $i <= ($bodycontent->length -1); $i++)
{
if ($bodycontent->item($i)->hasAttributes() == false)
{
$output .= '<' . $bodycontent->item($i)->tagName . '>';
}
else
{
$attributen = $bodycontent->item($i)->getAttribute('*');
$output .= '<' . $bodycontent->item($i)->tagName . ' ' . $attributen . '>';
}
$output .= $bodycontent->item($i)->nodeValue;
$output .= '</' . $bodycontent->item($i)->tagName . ">\r\n";
}
return $output;
}
}
?>
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
2
3
4
5
6
7
8
9
10
11
12
13
<pre><?php
include "parser.php";
$voorbeeld = new classDTC('voorbeeld.html');
echo "\r\n\r\nDe titel is:\r\n";
echo $voorbeeld->getTitel();
echo "\r\n\r\nDe meta tag(s) is/zijn:\r\n";
print_r($voorbeeld->getMetaData());
echo "\r\n\r\nDe inhoud van het document is:\r\n";
print htmlentities($voorbeeld->getbody(true));
?></pre>
include "parser.php";
$voorbeeld = new classDTC('voorbeeld.html');
echo "\r\n\r\nDe titel is:\r\n";
echo $voorbeeld->getTitel();
echo "\r\n\r\nDe meta tag(s) is/zijn:\r\n";
print_r($voorbeeld->getMetaData());
echo "\r\n\r\nDe inhoud van het document is:\r\n";
print htmlentities($voorbeeld->getbody(true));
?></pre>
Volgens mij biedt VB ook ondersteuning voor DOM via XMLHTTP
@Webmakerij: als ik zo even snel naar je classDTC kijk, is het eigelijk een uitbreiding op DOMDocument en zou het je werk besparen als je
class classDTC extends DOMDocument gebruikt. Zo heb ik een clsRSS die ik extend op DOMDocument.
[/offtoppic]
@Boaz
Dit is zomaar nog een beginetje, maar er zullen inderdaad veel dingen van DOMDocument in terugkomen - alhoewel je het misschien meer moet zien als een interface op DOMDocument.
vb - dom
Nu weet ik ook dat DOM niet enkel javascript is
hier heb je mijn test bestand
http://test.styledideas.be/
hier mijn code
en hier mijn phpinfo()
http://test.styledideas.be/phpinfo.php
als iemand me hiermee kan helpen is hij/zij zeker welkom :)
nja, heb ik dat dan zo mis op? maar retourneerd domxml_open_file geen dom document?