1
<ITEMS>
 <ITEM ItemID="XY">
 <ItemSearchName />
 <ITEMDESCRIPTION>
      <DESCRIPTION descriptionType="T" descriptionTypeTitle="Short" languageId="1" language="English">English description</DESCRIPTION>
      <DESCRIPTION descriptionType="T" descriptionTypeTitle="Short" languageId="2" language="France">Fance description</DESCRIPTION>
 </ITEMDESCRIPTION>
 <ItemType>B</ItemType>
 <ItemDepartment />
 <ITEMDIMENSIONS>
      <ItemDimensionUOM>m</ItemDimensionUOM>
 </ITEMDIMENSIONS>
 <ItemGrossWeihgt>0.00</ItemGrossWeihgt>
 </ITEM>
</ITEMS>

This is an example of my XML file parsed with simplexml method. I do read ItemID attribute value with this code (just an example):

 $item->attributes()->ItemID

My question is, how to access DESCRIPTION under DESCRIPTION attribute languageId = 1?

I can do this with foreach:

foreach ($item->ITEMDESCRIPTION->DESCRIPTION as $desc) {
                if ($desc['languageId'] == '1') {
                    echo "<td>" . $desc . "</td>";
                }
}

but I would prefer not to use foreach.

Another possibility is this:

$desc2 = $item->ITEMDESCRIPTION->DESCRIPTION[1];

but this is just the first DESCRIPTION and not the description with attribute languageId = 1.

Thanks for any suggestions!

Iztok
  • 77
  • 2
  • 8

1 Answers1

0

You can also use xpath to get the particular value. Example:

$xml_string = '<ITEMS> <ITEM ItemID="XY"> <ItemSearchName /> <ITEMDESCRIPTION> <DESCRIPTION descriptionType="T" descriptionTypeTitle="Short" languageId="1" language="English">English description</DESCRIPTION> <DESCRIPTION descriptionType="T" descriptionTypeTitle="Short" languageId="2" language="France">Fance description</DESCRIPTION> </ITEMDESCRIPTION> <ItemType>B</ItemType> <ItemDepartment /> <ITEMDIMENSIONS> <ItemDimensionUOM>m</ItemDimensionUOM> </ITEMDIMENSIONS> <ItemGrossWeihgt>0.00</ItemGrossWeihgt> </ITEM></ITEMS>';
$xml = simplexml_load_string($xml_string);
$value = $xml->xpath('//ITEMDESCRIPTION/DESCRIPTION[@languageId="1"]')[0];
echo (string) $value; // English description

Or just simple foreach:

foreach($xml->ITEM->ITEMDESCRIPTION->DESCRIPTION as $desc) {
    if($desc->attributes()['languageId'] == 1) {
        echo (string) $desc; // English description
    }
}
user1978142
  • 7,946
  • 3
  • 17
  • 20
  • `$value = $xml->xpath('ITEMDESCRIPTION/DESCRIPTION[@languageId="1"]'); echo $value[0]; echo $value[1];` ...did the job. Thanks for helping! – Iztok Jul 09 '14 at 11:52