Hej (igen),
Dette er en fortsættelse af "Parsning ad XML-fil fejler første gang "æ"
findes", som jeg startede i aftes.
Jeg er nu kommet videre med mit problem, og kan reproducere det med et meget
simpelt eksempel. Mit håb er, at det vil gøre det lettere for jer derude at
hjælpe mig!
Mit problem er - som forklaret i den anden tråd - at min CDATA handler
bliver kaldt to gange, når CDATA-elementet er "Test af æøå - test af æøå".
Første gang den bliver kaldt er det med strengen "Test af " og anden gang er
det med strengen "æøå - Test af æøå".
Jeg forstår ikke hvorfor det sker; mit mål er, at den kun skal kaldes én
gang med hele strengen "Test af æøå - Test af æøå".
Er der en, der har en idé til, hvad der kan være galt???
Jeg har placeret tre filer på mit domæne:
http://jbro.dk/xmltest/input.xml
http://jbro.dk/xmltest/xmlparser.php
http://jbro.dk/xmltest/xmlparser.phpi
input.xml indeholder kun én linie:
<title>Test af æøå - Test af æøå</title>
xmlparser.php (du kan osse se koden ved at klikke på det tredje af de
ovenstående links):
<?php
$file = "input.xml";
function startElementHandler($parser, $name, $attrs) {
print("<br />start-element \"".$name."\"");
}
function endElementHandler($parser, $name) {
print("<br />end-element: \"".$name."\"");
}
function dataElementHandler($parser, $data) {
print("<br />data-element \"".$data."\"");
}
//$xml_parser = xml_parser_create();
$xml_parser = xml_parser_create("ISO-8859-1");
xml_set_element_handler($xml_parser, "startElementHandler",
"endElementHandler");
xml_set_character_data_handler($xml_parser, "dataElementHandler");
// Do not make all elements uppercase!
xml_parser_set_option($xml_parser, XML_OPTION_CASE_FOLDING, 0);
xml_parser_set_option($xml_parser, XML_OPTION_TARGET_ENCODING,
"ISO-8859-1");
if (!($fp = fopen($file, "r"))) {
die("could not open XML input");
}
while ($data = fread($fp, 4096)) {
if (!xml_parse($xml_parser, $data, feof($fp))) {
die(sprintf("XML error: %s at line %d",
xml_error_string(xml_get_error_code($xml_parser)),
xml_get_current_line_number($xml_parser)));
}
}
xml_parser_free($xml_parser);
?>