Ik heb een PHP bestand dat een XML doc genereert vanuit mijn DB.
Dat gaat allemaal goed, dit is de code:
en dit de output:
Nu wilke ik via een voorbeeld van PHP.net deze dynamische XML parsen met een statisch XSL(t) bestand.
Deze ziet er zo uit:
Maar het wil maar niet lukken.....
heb deze code om de transformatie te maken in PHP:
Krijg, wat ik ook doe de volgende error:
" Warning: Sablotron error on line 1: XML parser error 4: not well-formed (invalid token) in E:\Projects\Current\xslt\phpnetxml.php on line 20 "
Als ik de output btw in een XMLdoc zet, doet hij het wel!
Weet iemand wat ik fout doe?
PS. Is het handiger met zoveel bestanden dat ik ipv [code[ en [/code[ een URL gebruik waar jullie de bestanden vandaan kunnen plukken?
En wordt ik daarna niet op mijn domein doodgespammed door URLtrackers?
Thanx.
PS. Ik gebruik PHP 4.3.3 met Expat en Sablotron. Daarnaast staan de extensie php_xslt & php_dom geladen.
Dat gaat allemaal goed, dit is de code:
code:
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
| <?php
if (!$dbconnect = mysql_connect('localhost', '', '')) {
echo "Connection failed to the host 'localhost'.";
exit;
} // if
if (!mysql_select_db('test')) {
echo "Cannot connect to database 'test'";
exit;
} // if
$table_id = 'xml';
$query = "SELECT * FROM $table_id";
$dbresult = mysql_query($query, $dbconnect);
// create a new XML document
$doc = domxml_new_doc('1.0');
// create root node
$root = $doc->create_element('zippers');
$root = $doc->append_child($root);
// process each row from the sql query
while ($row = mysql_fetch_assoc($dbresult)) {
// add node for each row
$occ = $doc->create_element($table_id);
$occ = $root->append_child($occ);
// add a child node for each field
foreach ($row as $fieldname => $fieldvalue) {
$child = $doc->create_element($fieldname);
$child = $occ->append_child($child);
$value = $doc->create_text_node($fieldvalue);
$value = $child->append_child($value);
} // foreach
} // while
// get completed xml document
$xml_string = $doc->dump_mem(true);
echo $xml_string;
?> |
en dit de output:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
| <?xml version="1.0"?>
<zippers>
<xml>
<zip>zip</zip>
<zap>zap</zap>
<nummer>1</nummer>
<zop>zop</zop>
</xml>
<xml>
<zip>zip1</zip>
<zap>zap</zap>
<nummer>0</nummer>
<zop>zop</zop>
</xml>
<xml>
<zip>zip2</zip>
<zap>zap</zap>
<nummer>0</nummer>
<zop>zop</zop>
</xml>
</zippers> |
Nu wilke ik via een voorbeeld van PHP.net deze dynamische XML parsen met een statisch XSL(t) bestand.
Deze ziet er zo uit:
code:
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
| <?xml version="1.0"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="/">
<html>
<head>
<title> XML Quiz </title>
</head>
<body>
<xsl:apply-templates select="zippers/xml" />
</body>
</html>
</xsl:template>
<!-- Parse all available questions of the XML document -->
<xsl:template match="xml">
<div><xsl:value-of select="zip" /></div>
<div><xsl:value-of select="zap" /></div><br />
</xsl:template>
</xsl:stylesheet> |
Maar het wil maar niet lukken.....
heb deze code om de transformatie te maken in PHP:
code:
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
| <?php
// Gonna contain PHP-XML output
$arguments = array(
'/_xml' => $xml,
);
$xh = xslt_create();
// Read plain PHP-XML output
$xmlData = fopen ("http://localhost/current/xslt/xml.php", "r");
// Stack up output into one String
while ($line = fgets ($xmlData))
$xml .= $line;
// Process the document
$result = xslt_process($xh, 'arg:/_xml', 'http://localhost/current/xslt/test.xsl', NULL, $arguments);
// Print out your transformed document
echo $result;
xslt_free($xh);
?> |
Krijg, wat ik ook doe de volgende error:
" Warning: Sablotron error on line 1: XML parser error 4: not well-formed (invalid token) in E:\Projects\Current\xslt\phpnetxml.php on line 20 "
Als ik de output btw in een XMLdoc zet, doet hij het wel!
Weet iemand wat ik fout doe?
PS. Is het handiger met zoveel bestanden dat ik ipv [code[ en [/code[ een URL gebruik waar jullie de bestanden vandaan kunnen plukken?
En wordt ik daarna niet op mijn domein doodgespammed door URLtrackers?
Thanx.
PS. Ik gebruik PHP 4.3.3 met Expat en Sablotron. Daarnaast staan de extensie php_xslt & php_dom geladen.
mijn naam slaat nergens op, althans niet op mij :P