Det ligger till så här att jag har en .xml fil som jag hämtar ut information med hjälp av php.
XML filens uppbyggnad:
<keep name="Caer Renaris" realm="Albion">
<owner>Albion</owner>
</keep>
<keep name="Caer Hurbury" realm="Albion">
<owner>Albion</owner>
<claimant>Lusitania High Council</claimant>
<claimant_guildurl>No website entered</claimant_guildurl>
<claimant_heraldurl>tjoho.html</claimant_heraldurl>
</keep>
Sedan kommer php koden här:
<?php
function startElement($parser, $name, $attrs=''){
global $current_tag,$thename, $therealm;
$current_tag = $name;
switch($name){
case 'KEEP':
$thename[]=$attrs['NAME'];
$therealm[]=$attrs['REALM'];
break;
default:
break;
}
}
function endElement($parser, $name, $attrs=''){
global $current_tag;
switch($name){
case 'OWNER':
case 'CLAIMANT':
case 'CLAIMANT_URL':
case 'CLAIMANT_HERALDURL':
case 'KEEP':
$current_tag = '';
break;
default:
break;
}
}
function characterData($parser, $data){
global $current_tag, $theowner, $theclaimant, $theclaimanturl, $theclaimantheraldurl;
switch($current_tag){
case 'OWNER':
$theowner[]=$data;
break;
case 'CLAIMANT':
$theclaimant[]=$data;
break;
case 'CLAIMANT_URL':
$theclaimanturl[]=$data;
break;
case 'CLAIMANT_HERALDURL':
$theclaimantheraldurl[]=$data;
break;
default:
break;
}
}
$xml_file = xmlfil.xml';
$type = 'UTF-8';
$xml_parser = xml_parser_create($type);
xml_parser_set_option($xml_parser, XML_OPTION_CASE_FOLDING, true);
xml_parser_set_option($xml_parser, XML_OPTION_TARGET_ENCODING, 'UTF-8');
xml_set_element_handler($xml_parser, 'startElement','endElement');
xml_set_character_data_handler($xml_parser, 'characterData');
if (!($fp = fopen($xml_file, 'r'))) {
die("Could not open $xml_file for parsing!\n");
}
$xmldata="";
while ($data = fread($fp, 4096)) {
if (!($data = utf8_encode($data))) {
echo 'ERROR'."\n";
}
$xmldata.=$data;
}
if (!xml_parse($xml_parser, $xmldata, true)) {
die("XML error".xml_error_string(xml_get_error_code($xml_parser)));
}
xml_parser_free($xml_parser);
array_multisort ($therealm, SORT_STRING, $thename, $theowner, $theclaimant, $theclaimanturl, $theclaimantheraldurl);
echo '<table border="1">';
foreach ( $therealm as $key => $value ) {
if($key < 21)
{
echo "<tr>";
echo "<td>$therealm[$key]</td>";
echo "<td>$thename[$key]</td>";
echo "<td>$theowner[$key]</td>";
echo "<td>$theclaimant[$key]</td>";
echo "<td>$theclaimanturl[$key]</td>";
echo "<td>$theclaimantheraldurl[$key]</td>";
echo "</tr>\n";
}
}
echo'</table>';
?>
Problemet ligger nu i att om det inte finns nån t.ex "<claimant>" inuti "<keep>" i .xml filen så plockar den nästa "<claimant>" .. och det blir ju inte rätt..
För i detta fall skulle utskriften bli:
Caer Renaris | Albion | Albion | Lusitania High Council | No website entered | tjoho.html
Caer Hurbury | Albion | Albion
Nån som ser problemet? ..
För "Lusutania High Council tillhör ju <keep name="Caer Hurbury">
Åh.. jättesvårt att förklara :)
Fråga om nåt är oklart! ..