0

Hello i have this catalog in xml from an online merchant, my question is : how can i display properly the results of this file using php, i have tried to get some results but i don't know how to display correctly images or specific images(default, small or medium..) and url. thanks i'm totally new in php.

<?xml version="1.0" encoding="UTF-8"?>
<catalog id="[Identifiant du programme]">
<products>
<product>
<product_id>
      <ean>["European Article Numbering" du produit]</ean>
      <store>[Reference produit du marchand]</store>
      <manufacturer>[Reference produit du fabricant]</manufacturer>
    </product_id>
    <trademark>[Marque du produit]</trademark>
    <title>[Nom du produit]</title>
    <desc>[Description du produit]</desc>
    <full_desc>[Description élargie du produit]</full_desc>
    <url>[Lien de redirection tracké Public-Idées du produit]</url>
    <other>[Informations complémentaires sur le produit]</other>
    <product_images>
      <image type="default">[Lien vers l'image par défaut du produit]</image>
      <image type="small">[Lien vers l'image de petite taille du produit]</image>
      <image type="medium">[Lien vers l'image de taille moyenne du produit]</image>
      <image type="large">[Lien vers l'image de grande taille du produit]</image>
    </product_images>
    <price currency="[Unité monétaire utilisée du prix du produit]">[Prix du produit]</price>
    <tax>
      <name>[Nom de la taxe associée au produit]</name>
      <price currency="[Unité monétaire de la taxe du produit]">[Montant de la taxe associée au produit]</price>
    </tax>
    <shipping>
      <delivery>[Texte associé aux frais de port du produit]</delivery>
      <price currency="[Unité monétaire des frais de port]">[Montant des frais de port du produit]</price>
    </shipping>
    <category>
      <merchant>
        <name>[Catégorie du marchand associée au produit]</name>
        <id>[Identifiant de la catégorie du marchand associée au produit]</id>
      </merchant>
    </category>
  </product>
</products>

2 Answers2

1

PHP offers you two most recommended libraries to do this (there are more, both built-in as well as external ones). One is SimpleXML and the other one is DOMDocument. Both operate on the XML, here just two examples, one for each. Please consult the online documentation for more details:

$images   = $simpleXMLElement->xpath('//image');

printf("Found %d image(s):\n", count($images));
foreach($images as $i => $image) {
    printf(" * %d. %s\n", $i+1, $image);
}

/**** output:

Found 4 image(s):
 * 1. [Lien vers l'image par défaut du produit]
 * 2. [Lien vers l'image de petite taille du produit]
 * 3. [Lien vers l'image de taille moyenne du produit]
 * 4. [Lien vers l'image de grande taille du produit]

Second example with DOMDocument:

$images = $domDocument->getElementsByTagName('image');

printf("Found %d image(s):\n", $images->length);
foreach($images as $i => $image) {
    printf(" * %d. %s\n", $i+1, $image->nodeValue);
}

/**** output:

Found 4 image(s):
 * 1. [Lien vers l'image par défaut du produit]
 * 2. [Lien vers l'image de petite taille du produit]
 * 3. [Lien vers l'image de taille moyenne du produit]
 * 4. [Lien vers l'image de grande taille du produit]

Which library you choose is up to you. I suggest you experiment with both. DOMDocument follows the standards which makes it easy to use, SimpleXMLElement doesn't and tries to be less verbose however you need to know more to fully exploit it.

If your problem is not related to XML but just how to link / display images, then you need to specify what qualifies an image and how in the data you've provided. So far I only see French descriptions in square brackets ;)

Community
  • 1
  • 1
M8R-1jmw5r
  • 4,896
  • 2
  • 18
  • 26
0

Working example: your xml is not complete: missing catalog end tag so I add it:

$xml = '<?xml version="1.0" encoding="UTF-8"?>
        <catalog id="[Identifiant du programme]">
            <products>
            <product>
                <product_id>
                  <ean>["European Article Numbering" du produit]</ean>
                  <store>[Reference produit du marchand]</store>
                  <manufacturer>[Reference produit du fabricant]</manufacturer>
                </product_id>
                <trademark>[Marque du produit]</trademark>
                <title>[Nom du produit]</title>
                <desc>[Description du produit]</desc>
                <full_desc>[Description élargie du produit]</full_desc>
                <url>[Lien de redirection tracké Public-Idées du produit]</url>
                <other>[Informations complémentaires sur le produit]</other>
                <product_images>
                  <image type="default">[Lien vers l\'image par défaut du produit]</image>
                  <image type="small">[Lien vers l\'image de petite taille du produit]</image>
                  <image type="medium">[Lien vers l\'image de taille moyenne du produit]</image>
                  <image type="large">[Lien vers l\'image de grande taille du produit]</image>
                </product_images>
                <price currency="[Unité monétaire utilisée du prix du produit]">[Prix du produit]</price>
                <tax>
                  <name>[Nom de la taxe associée au produit]</name>
                  <price currency="[Unité monétaire de la taxe du produit]">[Montant de la taxe associée au produit]</price>
                </tax>
                <shipping>
                  <delivery>[Texte associé aux frais de port du produit]</delivery>
                  <price currency="[Unité monétaire des frais de port]">[Montant des frais de port du produit]</price>
                </shipping>
                <category>
                  <merchant>
                    <name>[Catégorie du marchand associée au produit]</name>
                    <id>[Identifiant de la catégorie du marchand associée au produit]</id>
                  </merchant>
                </category>
              </product>
            </products>
        </catalog>';

       $dom = simplexml_load_string($xml);

       $producs = $dom->products->product;

       foreach($producs as $product){

            echo('ean:' . (string)$product->product_id->ean);   
            echo('<br />');   
            $images = $product->product_images->image; 
            foreach($images as $img){
                echo('type:' . (string)$img['type'] . ' value:' . (string)$img);
                echo('<br />');         
            }

       }
Adidi
  • 5,097
  • 4
  • 23
  • 30