<help>
Hej Ole
Jeg har det problem med min nuværende parser, at den ikke mere kan udtrække de data jeg gerne vil have.
Den har tidligere fungeret, men efter at xml-filen er blevet ændret ( noget som jeg ikke har med at gøre ), da ændrede jeg min kode, der ganske givet vil se klodset ud for langt de fleste her.
Det betyder for mig, at intet som helst virker og de gange hvor jeg får enkelte data udtrukket, får jeg som regel enten tomme værdier eller værdier hvor der foran står anført <![CDATA[
og til sidst ]]>
Disse "TAGS" har ikke tidligere eksisteret i de anvendte xml-dokumenter.
Min nu total ikke-funktionelle kode ser således ud:
<?
// ------------------------------------------------- SETUP ----------------------------------------------
$vinside = 'red'; // ---- Avaliable Values: "red","white", "rose" vælg relevant side
$table_output = true; // ---- Mulige Values: "true","false" vis vinens navn i table eller single column.
$category = Pauillac; // ---- Avaliable Values: "Pauillac","Pomerol","Margaux" etc. - evt NULL
// ---- Sæt xml source og side-url ( vinside )
switch ( $vinside ) {
case 'red' :
$xml_source = '
http://www.xxx.xxx/red.xml'; $site_url = '
http://www.xxx.xxx'; break;
case 'white' :
$xml_source = '
http://www.xxx.xxx/white.xml'; $site_url = '
http://www.xxx.xxx'; break;
case 'rose' :
default :
$xml_source = '
http://www.xxx.xxx/rose.xml'; $site_url = '
http://www.xxx.xxx';}
// ---- hvis der er data så forsøg at parse
if ( $xml_content = file_get_contents( $xml_source ) ) {
$xml_parser = xml_parser_create();
xml_parse_into_struct( $xml_parser, $xml_content, $value, $full_index);
xml_parser_free( $xml_parser );
$items = array();
foreach ( $value as $current_value ) {
if ( $current_value['level'] == 3 ) {
$items[] = $current_value;
}
}
reset( $items );
$item_count = count( $items );
$wines = array();
for ( $i = 0; $i < $item_count; $i += 2 ) {
$current_wine_name = each( $items );
$current_category = each( $items );
$wines[ strtolower( $current_category['value']['value'] ) ][] = $current_wine_name['value']['value'];
}
// ---- hvis der er en kategori-parameter, vises den del af arrayet
if ( isset( $_GET['category'] ) && !empty( $_GET['category'] ) && isset( $wines[ strtolower( $_GET['category'] ) ] ) ) {
$category = $_GET['category'];
}
if ( $category !== null ) {
$category = strtolower( $category );
$new_wines = $wines[ $category ];
$wines = array();
$wines[ $category ] = $new_new wines;
}
// ------- OUTPUT
if ( $table_output ) {
// ---- hvor mange vine /række
if ( $wine_count = count_wines( $wines ) ) {
$max_rows = ceil( $wine_count / 4 );
} else {
$max_rows = 0;
}
echo '<table width="100%" cellspacing="0" cellpadding="0" border="0">' . "\n";
echo ' <tr>' . "\n";
echo ' <td valign="top">' . "\n";
}
$current_wine_number = 0;
foreach ( $wines as $current_category => $wines_in_category ) {
sort( $wines_in_category );
// ---- i "table_output" mode bruges ikke et kategori-navn
if ( ! $table_output ) {
// ---- Print Kategori-navn
echo $current_category . ' (' . count( $wines_in_category ) . ')<br>' . "\n";
}
foreach ( $wines_in_category as $current_wines ) {
if ( $table_output ) {
// ---- Hvis antallet af vine er større end det tilladte brydes op
if ( $current_wine_number > $max_rows ) {
$current_wine_number = 0;
echo '</td>' . "\n";
echo '<td valign="top">' . "\n";
}
}
echo '<font size="1" face="Verdana, Arial, Helvetica, sans-serif" color="#000000" size="1"><a href="' . $site_url . '/wineid=' . $current_wine'" target=_blank><span class="wine_name">' . $current_wine . '</span></a>' . "\n";
if ( $show_category_name ) {
echo ' <span class="wine_category">' . $current_category . '</span>';
}
echo '<br>';
// ---- forøg antallet af vine
$current_wine_number++;
}
}
if ( $table_output ) {
echo ' </td>' . "\n";
echo ' </tr>' . "\n";
echo '</table>' . "\n";
}
} else {
echo 'Fejl ved åbning af XML-fil';
}
/**
* Tæl alle vine i vin-array
*
* @param array $wines_array
* @return int
*/
function count_wines( $wines_array ) {
$ret = 0;
if ( is_array( $wines_array ) && count( $wines_array ) > 0 ) {
foreach ( $wines_array as $current_category => $wines ) {
$ret += count( $wines );
}
}
return $ret;
}
?>
og jeg er efterhånden lidt lost.
Håbede nogle eventuelt vidste hvordan man nemmest kunne udtrække de viste data øverst her på siden.
</help>