Take the 2-minute tour ×
Stack Overflow is a question and answer site for professional and enthusiast programmers. It's 100% free, no registration required.

I have the following XML:

      <CruiseCharts Copyright="(C) Alsek Technologies, Inc." Exported="2014-01-10T18:34:01" ImagesUrlRoot="http://081198621a967d166a1f-e081145dd5e1f0f3f186009058a70a37.r71.cf1.rackcdn.com/">
      <Itinerary TotalFullDays="5" CruisingFullDays="5" StartLocationName="Tampa, Florida" EndLocationName="Tampa, Florida" DistributorName="Carnival" DistributorID="1" SmallMapFilename="166d7d841ae1de8315960a3f3d1e4dce.jpg" LargeMapFilename="564003962db32f0b21d8151ff99c0285.jpg" LargeMapHtmlMap="&lt;map name=&quot;map1&quot;&gt;&lt;area href=&quot;#&quot; onClick=&quot;return false&quot; shape=&quot;rect&quot; coords=&quot;197,18,201,22&quot; title=&quot;Tampa, Florida&quot;/&gt;&lt;area href=&quot;#&quot; onClick=&quot;return false&quot; shape=&quot;rect&quot; coords=&quot;167,13,195,20&quot; title=&quot;Tampa, Florida&quot;/&gt;&lt;area href=&quot;#&quot; onClick=&quot;return false&quot; shape=&quot;rect&quot; coords=&quot;94,189,98,193&quot; title=&quot;Cozumel, Mexico&quot;/&gt;&lt;area href=&quot;#&quot; onClick=&quot;return false&quot; shape=&quot;rect&quot; coords=&quot;57,184,93,191&quot; title=&quot;Cozumel, Mexico&quot;/&gt;&lt;area href=&quot;#&quot; onClick=&quot;return false&quot; shape=&quot;rect&quot; coords=&quot;222,217,226,221&quot; title=&quot;George Town, Grand Cayman, Cayman Islands, United Kingdom&quot;/&gt;&lt;area href=&quot;#&quot; onClick=&quot;return false&quot; shape=&quot;rect&quot; coords=&quot;228,211,282,219&quot; title=&quot;George Town, Grand Cayman, Cayman Islands, United Kingdom&quot;/&gt;&lt;/map&gt;" DistributorLogoFilename="c1b9b02a38e72f5abf793979f5549c77.gif">
        <ItineraryItem CalendarDayOffset="0" LocationName="Tampa, Florida, United States" DepartureTime="16:00:00" />
        <ItineraryItem CalendarDayOffset="1" LocationName="At Sea" />
        <ItineraryItem CalendarDayOffset="2" LocationName="Cozumel, Mexico" ArrivalTime="07:00:00" DepartureTime="15:00:00" />
        <ItineraryItem CalendarDayOffset="3" LocationName="George Town, Grand Cayman, Cayman Islands, United Kingdom" ArrivalTime="10:00:00" DepartureTime="18:00:00" />
        <ItineraryItem CalendarDayOffset="4" LocationName="At Sea" />
        <ItineraryItem CalendarDayOffset="5" LocationName="Tampa, Florida, United States" ArrivalTime="08:00:00" />
        <Departure DepartureDate="2014-01-25" ShipName="Carnival Paradise" OperatorName="Carnival" DepartureID="37835048" ShipID="51" OperatorID="1" OperatorDepartureCode="20140125PA05" />
        <Departure DepartureDate="2014-11-15" ShipName="Carnival Paradise" OperatorName="Carnival" DepartureID="37835049" ShipID="51" OperatorID="1" OperatorDepartureCode="20141115PA05" />
        <Departure DepartureDate="2014-11-29" ShipName="Carnival Paradise" OperatorName="Carnival" DepartureID="37835050" ShipID="51" OperatorID="1" OperatorDepartureCode="20141129PA05" />
        <Departure DepartureDate="2014-12-13" ShipName="Carnival Paradise" OperatorName="Carnival" DepartureID="37835051" ShipID="51" OperatorID="1" OperatorDepartureCode="20141213PA05" />
        <Departure DepartureDate="2015-01-10" ShipName="Carnival Paradise" OperatorName="Carnival" DepartureID="37835052" ShipID="51" OperatorID="1" OperatorDepartureCode="20150110PA05" />
        <Departure DepartureDate="2015-02-07" ShipName="Carnival Paradise" OperatorName="Carnival" DepartureID="37835053" ShipID="51" OperatorID="1" OperatorDepartureCode="20150207PA05" />
      </Itinerary>
      <Itinerary TotalFullDays="7" CruisingFullDays="7" StartLocationName="Miami, Florida" EndLocationName="Miami, Florida" DistributorName="Carnival" DistributorID="1" SmallMapFilename="9eb6e4f1f6ba2e6e174e97492f5a7e8e.jpg" LargeMapFilename="8a508e8f9049ff5088e875de2c598364.jpg" LargeMapHtmlMap="&lt;map name=&quot;map1&quot;&gt;&lt;area href=&quot;#&quot; onClick=&quot;return false&quot; shape=&quot;rect&quot; coords=&quot;234,18,238,22&quot; title=&quot;Miami, Florida&quot;/&gt;&lt;area href=&quot;#&quot; onClick=&quot;return false&quot; shape=&quot;rect&quot; coords=&quot;209,13,233,20&quot; title=&quot;Miami, Florida&quot;/&gt;&lt;area href=&quot;#&quot; onClick=&quot;return false&quot; shape=&quot;rect&quot; coords=&quot;93,129,97,133&quot; title=&quot;Cozumel, Mexico&quot;/&gt;&lt;area href=&quot;#&quot; onClick=&quot;return false&quot; shape=&quot;rect&quot; coords=&quot;55,123,91,130&quot; title=&quot;Cozumel, Mexico&quot;/&gt;&lt;area href=&quot;#&quot; onClick=&quot;return false&quot; shape=&quot;rect&quot; coords=&quot;209,154,213,158&quot; title=&quot;George Town, Grand Cayman, Cayman Islands, United Kingdom&quot;/&gt;&lt;area href=&quot;#&quot; onClick=&quot;return false&quot; shape=&quot;rect&quot; coords=&quot;215,148,269,156&quot; title=&quot;George Town, Grand Cayman, Cayman Islands, United Kingdom&quot;/&gt;&lt;area href=&quot;#&quot; onClick=&quot;return false&quot; shape=&quot;rect&quot; coords=&quot;77,166,81,170&quot; title=&quot;Costa Maya, Mexico&quot;/&gt;&lt;area href=&quot;#&quot; onClick=&quot;return false&quot; shape=&quot;rect&quot; coords=&quot;82,160,174,168&quot; title=&quot;Costa Maya, Mexico&quot;/&gt;&lt;area href=&quot;#&quot; onClick=&quot;return false&quot; shape=&quot;rect&quot; coords=&quot;102,216,106,220&quot; title=&quot;Mahogany Bay, Roat&amp;#225;n Island, Honduras&quot;/&gt;&lt;area href=&quot;#&quot; onClick=&quot;return false&quot; shape=&quot;rect&quot; coords=&quot;75,222,133,230&quot; title=&quot;Mahogany Bay, Roat&amp;#225;n Island, Honduras&quot;/&gt;&lt;/map&gt;" DistributorLogoFilename="c1b9b02a38e72f5abf793979f5549c77.gif">
        <ItineraryItem CalendarDayOffset="0" LocationName="Miami, Florida, United States" DepartureTime="16:00:00" />
        <ItineraryItem CalendarDayOffset="1" LocationName="At Sea" />
        <ItineraryItem CalendarDayOffset="2" LocationName="Cozumel, Mexico" ArrivalTime="08:00:00" DepartureTime="17:00:00" />
        <ItineraryItem CalendarDayOffset="3" LocationName="Costa Maya, Mexico" ArrivalTime="08:00:00" DepartureTime="16:00:00" />
        <ItineraryItem CalendarDayOffset="4" LocationName="Mahogany Bay, Roatan Island, Honduras" ArrivalTime="08:00:00" DepartureTime="15:00:00" />
        <ItineraryItem CalendarDayOffset="5" LocationName="George Town, Grand Cayman, Cayman Islands, United Kingdom" ArrivalTime="10:00:00" DepartureTime="18:00:00" />
        <ItineraryItem CalendarDayOffset="6" LocationName="At Sea" />
        <ItineraryItem CalendarDayOffset="7" LocationName="Miami, Florida, United States" ArrivalTime="08:00:00" />
        <Departure DepartureDate="2015-01-04" ShipName="Carnival Splendor" OperatorName="Carnival" DepartureID="37827160" ShipID="40026" OperatorID="1" OperatorDepartureCode="20150104SL07" />
        <Departure DepartureDate="2015-02-08" ShipName="Carnival Splendor" OperatorName="Carnival" DepartureID="37835054" ShipID="40026" OperatorID="1" OperatorDepartureCode="20150208SL07" />
      </Itinerary>
  </CruiseCharts>

I am parsing it but i am getting as below result

 # text =
 Itinerary =
 # text = 
 empty values in tag

I have to parse this xml in PHP. how can i parse it and get values in each iteration as below format

TotalFullDays="5" CruisingFullDays="5" StartLocationName="Tampa, Florida" ... of each XML tag.

Itinerary, ItineraryItem, Departure tag.

I want to show the data in this format

http://asu.cruisecharts.com/departure.aspx?0=37827127

EDIT: This is my current code:

<?php
    $xmlDoc = new DOMDocument();
    $xmlDoc->load("alsek_cruisecharts.xml");
    $x = $xmlDoc->documentElement;
    foreach ($x->childNodes AS $item) {
        print $item->nodeName . " = " . $item->nodeValue . "<br>";
    }
?>
share|improve this question
    
Please provide your PHP code that attempts to do what you want to do. –  Kaarel Nummert Mar 7 at 14:24
    
<?php $xmlDoc = new DOMDocument(); $xmlDoc->load("alsek_cruisecharts.xml"); $x = $xmlDoc->documentElement; foreach ($x->childNodes AS $item) { print $item->nodeName . " = " . $item->nodeValue . "<br>"; } ?> this code i am using but it returns empty value –  Amrish Khatri Mar 7 at 14:43
    
Also i am using this code but it returns values of Itinerary not for the Departure and ItineraryItem the code is as below <?php $xml = simplexml_load_string($string); foreach($xml->Itinerary[0]->attributes() as $a => $b) { echo $a,'="',$b,"\"\n"; } ?> where $string is xml –  Amrish Khatri Mar 7 at 15:04

1 Answer 1

up vote 0 down vote accepted

I'm not sure how you want to render it but here's one way to parse it. Turns it into an array of objects.

try {
    $xmlDoc = new DOMDocument();
    $xmlDoc->load('file.xml');

    if($xmlDoc===false)
        { throw new Exception('File not found.'); }

    $root = $xmlDoc->documentElement;

    $charts = array();

    foreach($root->getElementsByTagName('Itinerary') as $itinerary) {
        $chart = array();
    #   get attributes
        foreach($itinerary->attributes as $attribute)
            { $chart[$attribute->name] = $attribute->value; }

    #   get items
        $chart['Itinerary'] = array();

        foreach($itinerary->getElementsByTagName('ItineraryItem') as $itineraryItem) {
            $item = array();

            foreach($itineraryItem->attributes as $attr)
                { $item[$attr->name] = $attr->value; }

            $chart['Itinerary'][] = $item;
        }

    #   get departures
        $chart['Departures'] = array();

        foreach($itinerary->getElementsByTagName('Departure') as $departure) {
            $item = array();

            foreach($departure->attributes as $attr)
                { $item[$attr->name] = $attr->value; }

            $chart['Departures'][] = $item;
        }

        $charts[] = $chart;
    }

#   objectify
    $charts = json_decode(json_encode($charts));

#   print structure
#   print_r($charts);

    foreach($charts as $chart) {
    #   use it
    }
}
catch (Exception $exc) {
    die($exc->getMessage());
}

You can use it like so:

Get the DistributorName of the first Itinerary:

$charts[0]->DistributorName;

Get the LocationName of the second ItineraryItem in the first Itinerary:

$charts[0]->Itinerary[1]->LocationName;

Get the ShipId of the third Departure in the second Itinerary:

$charts[1]->Departures[2]->ShipId;

If you want to do some formatting like converting CruiseCharts/Itinerary/Departure/DepartureDate into a proper DateTime object you'll want to look at the foreach loops where I'm accessing the attributes properties.

share|improve this answer
    
Thanks Dissident i think this will help me, I will try to make this code on my page lets see.. thanks for this.. –  Amrish Khatri Mar 8 at 6:30

Your Answer

 
discard

By posting your answer, you agree to the privacy policy and terms of service.

Not the answer you're looking for? Browse other questions tagged or ask your own question.