Avatar billede donslund Nybegynder
28. november 2006 - 20:09 Der er 11 kommentarer og
1 løsning

Simpel XML reader

Jeg er på jagt efter en simpel kode der kan læse en xml-kode.

I Flash er det rimeligt simpelt. Det må det da også være i php.

Håber nogen kan hjælpe.
Avatar billede loevgaard Praktikant
28. november 2006 - 20:59 #1
Avatar billede donslund Nybegynder
28. november 2006 - 21:09 #2
Nej, det er det sikkert ikke, men jeg fatter ikke en fis. SYnes jeg har forsøgt flere ting.

For eksempel:

<?php
$indent = "";
$file = "link til xml-fil";

$showfile = $file;  // whatever path
  // maybe the whole path is not important, look it up in other posts

$newstring=utf8_encode($showfile);          // it's important!
if(!$domDocument = domxml_open_mem($newstring)) {
  echo "Couldn't load xml...";   
  exit;
}

$rootDomNode = $domDocument->document_element();
print "<pre>";
printElements($rootDomNode);
print "</pre>";

function printElements($domNode)
{
  if($domNode)
  {
  global $indent;
 
  if($domNode->node_type() == XML_ELEMENT_NODE)
  {
    print "<br />".$indent."&lt;".$domNode->node_name();
    if($domNode->has_attributes())
    {
      $attributes = $domNode->attributes();
      foreach($attributes as $domAttribute)
      {
        print " $domAttribute->name=\"$domAttribute->value\"";
      }
    }
    print "&gt;";
    if($domNode->has_child_nodes())
    {
      $indent.="  ";
      $nextNode = $domNode->first_child();
      printElements($nextNode);
      $indent= substr($indent, 0, strlen($indent)-2);
      print "<br />".$indent."&lt;"."/".$domNode->node_name()."&gt;";
    }
    else
    {
      print "$domNode->node_value()&lt;/".$domNode->node_name()."&gt;";
    }                       
  }
 
  $nextNode = $domNode->next_sibling();
  printElements($nextNode);
  }
}
?>
Avatar billede coderdk Praktikant
28. november 2006 - 21:27 #3
I php5 er det bare at bruge SimpleXML, det er simpelt :)
Avatar billede donslund Nybegynder
28. november 2006 - 22:01 #4
Warning: SimpleXMLElement::__construct() [function.SimpleXMLElement---construct]: Entity: line 4: parser error : Start tag expected, '<' not found in e:\webopgaver\xmltest.php on line 18

Warning: SimpleXMLElement::__construct() [function.SimpleXMLElement---construct]: in e:\webopgaver\xmltest.php on line 18

Warning: SimpleXMLElement::__construct() [function.SimpleXMLElement---construct]: ^ in e:\webopgaver\xmltest.php on line 18

Fatal error: Uncaught exception 'Exception' with message 'String could not be parsed as XML' in e:\webopgaver\xmltest.php:18 Stack trace: #0 e:\webopgaver\xmltest.php(18): SimpleXMLElement->__construct('???') #1 {main} thrown in e:\webopgaver\xmltest.php on line 18

Det er hvad jeg får. Jeg bruger $xmlstr = simplexml_load_file('http://w til at indcludere en php-fil der genererer en xml-fil. Burde det ikke være okay?
Avatar billede coderdk Praktikant
28. november 2006 - 22:04 #5
Hvordan er XML'en udformet? (Er den well-formed?)
Avatar billede coderdk Praktikant
28. november 2006 - 22:07 #6
Den her virker f.eks.:

$xmlstr = "<rod><element><ting>hej</ting></element><element><ting>blob</ting></element></rod>";
$xml = simplexml_load_string( $xmlstr );
echo $xml->element[1]->ting[0];
Avatar billede donslund Nybegynder
28. november 2006 - 22:10 #7
Ja, men jeg skal have xml'en med ind et andet sted fra.
Avatar billede coderdk Praktikant
28. november 2006 - 22:21 #8
Ok simplexml_load_file burde gøre det som du skriver... Men er XML'en ok? Kan du copy/paste XML'en og bruge simplexml_load_string (bare for at teste)?
Avatar billede coderdk Praktikant
28. november 2006 - 22:24 #9
Hvis du har PHP mindre end 5.1 så prøv:

$url = 'http://www.example.dk/ditscript.php';
$xml = simplexml_load_file( rawurlencode( $url ) );

Mht. min tidligere kommentar, prøv:

$cnt = file_get_contents( $url );
$xml = simplexml_load_string( $cnt );
Avatar billede donslund Nybegynder
28. november 2006 - 22:30 #10
Du har endnu en gang reddet min dag. Tak for hjælpen.

Smid et svar.
Avatar billede coderdk Praktikant
28. november 2006 - 23:12 #11
Cool :) Hvad brugte du?
Avatar billede donslund Nybegynder
28. november 2006 - 23:35 #12
$xmlstr = $row["tx_templavoila_flex"];
$xml = simplexml_load_string( $xmlstr );
echo $xml->data->sheet[0]->language[0]->field[0]->value[0];
echo $xml->data->sheet[0]->language[0]->field[1]->value[0];
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester