php - SimpleXML get all child nodes from Line NUMBER=*

597

I have scoured StackOverflow for hours trying to find something to help me, there is a lot of stuff about child nodes, but nothing about Line NUMBERS in an XML file and pulling them into a php file. I have an XML file structured like this:

<MemberId ID="FC0491">
  <BillingInfo>
    <StatementEndDate>20140331</StatementEndDate>
    <BillingSubAccount>
    </BillingSubAccount>
    <BalanceForward>1264</BalanceForward>
    <BalanceDue>1227.47</BalanceDue>
    <Payments>-1264</Payments>
    <Aging>
      <Amount PERIOD="1">1227.47</Amount>
      <Amount PERIOD="2">0</Amount>
      <Amount PERIOD="3">0</Amount>
      <Amount PERIOD="4">0</Amount>
      <Amount PERIOD="5">0</Amount>
    </Aging>
    <Minimum>
      <CycleFrom>20140101</CycleFrom>
      <CycleTo>20141231</CycleTo>
      <Unspent>1000</Unspent>
      <Spent>0</Spent>
      <TotalAmount>1000</TotalAmount>
    </Minimum>
    <Details>
      <Line NUMBER="0">
        <ChargeDate>20140301</ChargeDate>
        <DueDate>20140301</DueDate>
        <TrackingNumber>CR</TrackingNumber>
        <Description>Transfer from Legacy</Description>
        <RevCode>SJ1220</RevCode>
        <RevDesc>TRANSFER FROM LEGACY</RevDesc>
        <SalesAmount>-36.53</SalesAmount>
        <ServiceCharge>0.00</ServiceCharge>
        <GST>0.00</GST>
        <PST>0.00</PST>
        <Othertaxes>0.00</Othertaxes>
        <Total>-36.53</Total>
        <ChitCode>CR</ChitCode>
        <ChitDate>20140301</ChitDate>
      </Line>
      <Line NUMBER="1">
        <ChargeDate>20140324</ChargeDate>
        <DueDate>20140324</DueDate>
        <TrackingNumber>1933</TrackingNumber>
        <Description>Payment Received - Thank You</Description>
        <RevCode>CR3627</RevCode>
        <RevDesc>PAYMENT</RevDesc>
        <SalesAmount>-1264.00</SalesAmount>
        <ServiceCharge>
        </ServiceCharge>
        <GST>
        </GST>
        <PST>
        </PST>
        <Othertaxes>
        </Othertaxes>
        <Total>-1264.00</Total>
        <ChitCode>1933</ChitCode>
        <ChitDate>20140324</ChitDate>
      </Line>
      <Line NUMBER="2">
        <ChargeDate>20140331</ChargeDate>
        <DueDate>20140331</DueDate>
        <TrackingNumber>SJ1309</TrackingNumber>
        <Description>Capital Assessment</Description>
        <RevCode>SJ1309</RevCode>
        <RevDesc>CAPITAL ASSESSMENT</RevDesc>
        <SalesAmount>100.00</SalesAmount>
        <ServiceCharge>0.00</ServiceCharge>
        <GST>0.00</GST>
        <PST>0.00</PST>
        <Othertaxes>0.00</Othertaxes>
        <Total>100.00</Total>
        <ChitCode>SJ1309</ChitCode>
        <ChitDate>20140331</ChitDate>
      </Line>
      <Line NUMBER="3">
        <ChargeDate>20140331</ChargeDate>
        <DueDate>20140331</DueDate>
        <TrackingNumber>SJ1309</TrackingNumber>
        <Description>Corporate Monthly Dues</Description>
        <RevCode>SJ1309</RevCode>
        <RevDesc>CORPORATE MONTHLY DUES</RevDesc>
        <SalesAmount>1164.00</SalesAmount>
        <ServiceCharge>0.00</ServiceCharge>
        <GST>0.00</GST>
        <PST>0.00</PST>
        <Othertaxes>0.00</Othertaxes>
        <Total>1164.00</Total>
        <ChitCode>SJ1309</ChitCode>
        <ChitDate>20140331</ChitDate>
      </Line>
      <Line NUMBER="4">
        <ChargeDate>20140331</ChargeDate>
        <DueDate>20140331</DueDate>
        <TrackingNumber>AutoAdjust</TrackingNumber>
        <Description>Auto Account Adjustment</Description>
        <RevCode>AJ0668</RevCode>
        <RevDesc>AUTO ACCOUNT ADJUSTMENT</RevDesc>
        <SalesAmount>0.00</SalesAmount>
        <ServiceCharge>
        </ServiceCharge>
        <GST>
        </GST>
        <PST>
        </PST>
        <Othertaxes>
        </Othertaxes>
        <Total>0.00</Total>
        <ChitCode>AutoAdjust</ChitCode>
        <ChitDate>20140331</ChitDate>
      </Line>
    </Details>
  </BillingInfo>
</MemberId>

I hired someone to pull all the Line NUMBER items into a PHP page, but ti only pulls in the first line item. Here is the code:

$source = file_get_contents($fname);
$xml = new SimpleXMLElement($source);

foreach($xml->Billing->MemberId as $member){
if($member['ID'] == $uname){
    $balance = $member->BillingInfo->BalanceDue;
    $BalanceForward = $member->BillingInfo->BalanceForward;
    $Payments = $member->BillingInfo->Payments;
    $minimum_cyclyto = $member->BillingInfo->Minimum->CycleTo;
    $minimum_unspent = $member->BillingInfo->Minimum->Unspent;
    $minimum_totalamount = $member->BillingInfo->Minimum->TotalAmount;

    $agin='';
    foreach($member->BillingInfo->Aging->Amount as $a => $b) 
    {
    $agin .=$b.",";
    }
    // Format Date from XML
    $xmlstatedate = $member->BillingInfo->StatementEndDate;
    $statedate = DateTime::createFromFormat("Ymd", $xmlstatedate);
    $statemonth=DateTime::createFromFormat("m Y", $xmlstatedate);
    // Format Date from XML 
    $xmlpaydate = $member->BillingInfo->Details->Line->ChargeDate;
    $paydate = DateTime::createFromFormat("Ymd", $xmlpaydate);
    $TrackingNumber = $member->BillingInfo->Details->Line->TrackingNumber;
    $Description = $member->BillingInfo->Details->Line->Description;
    $SalesAmount = $member->BillingInfo->Details->Line->SalesAmount;
    $charge = $member->BillingInfo->Details->Line->Total;
    $grat = $member->BillingInfo->Details->Line->GST;
    $svc = $member->BillingInfo->Details->Line->PST;
    $tax = $member->BillingInfo->Details->Line->Othertaxes;
}
}   ?>

Here is the Table that pull in the data;

<table width="100%" border="0" cellpadding="2" cellspacing="2" bordercolor="#FFFFFF">
          <tr> 
            <td width="10%" bgcolor="#CCCCCC"><font size="2" face="Arial, Helvetica, sans-serif"><strong>Date</strong></font></td>
            <td width="15%" bgcolor="#CCCCCC"><font size="2" face="Arial, Helvetica, sans-serif"><strong>Tracking#</strong></font></td>
            <td width="10%" bgcolor="#CCCCCC"><font size="2" face="Arial, Helvetica, sans-serif"><strong>Receipt</strong></font></td>
            <td width="35%" bgcolor="#CCCCCC"><font size="2" face="Arial, Helvetica, sans-serif"><strong>Description</strong></font></td>
            <td width="10%" bgcolor="#CCCCCC"><font size="2" face="Arial, Helvetica, sans-serif"><strong>Charge</strong></font></td>
            <td width="5%" bgcolor="#CCCCCC"><font size="2" face="Arial, Helvetica, sans-serif"><strong>Svc</strong></font></td>
            <td width="5%" bgcolor="#CCCCCC"><font size="2" face="Arial, Helvetica, sans-serif"><strong>Grat</strong></font></td>
            <td width="5%" bgcolor="#CCCCCC"><font size="2" face="Arial, Helvetica, sans-serif"><strong>Tax</strong></font></td>
            <td width="5%" bgcolor="#CCCCCC"><font size="2" face="Arial, Helvetica, sans-serif"><strong>Total</strong></font></td>
          </tr>
          <tr> 
            <td bgcolor="DEB887"><font size="2" face="Arial, Helvetica, sans-serif"><strong>&nbsp;</strong></font></td>
            <td bgcolor="DEB887"><font size="2" face="Arial, Helvetica, sans-serif"><strong>&nbsp;</strong></font></td>
            <td bgcolor="DEB887"><font size="2" face="Arial, Helvetica, sans-serif"><strong>&nbsp;</strong></font></td>
            <td bgcolor="DEB887"><font size="2" face="Arial, Helvetica, sans-serif"><strong>Balance 
              Forward</strong></font></td>
            <td bgcolor="DEB887"><div align="center"><font size="2" face="Arial, Helvetica, sans-serif"><strong>&nbsp;</strong></font></div></td>
            <td bgcolor="DEB887"><div align="center"><font size="2" face="Arial, Helvetica, sans-serif"><strong>&nbsp;</strong></font></div></td>
            <td bgcolor="DEB887"><div align="center"><font size="2" face="Arial, Helvetica, sans-serif"><strong>&nbsp;</strong></font></div></td>
            <td bgcolor="DEB887"><div align="center"><font size="2" face="Arial, Helvetica, sans-serif"><strong>&nbsp;</strong></font></div></td>
            <td bgcolor="DEB887"><div align="center"><font size="2" face="Arial, Helvetica, sans-serif"><strong><?php echo $BalanceForward; ?></strong></font></div></td>
          </tr>
          <tr valign="top"> 
            <td><div align="center"><font size="2" face="Arial, Helvetica, sans-serif"><?php echo substr($xmlpaydate,4,2)."-".substr($xmlpaydate,6,2)."-".substr($xmlpaydate,0,4);//$paydate->format('m-d-Y'); ?></font></div></td>
            <td><div align="center"><font size="2" face="Arial, Helvetica, sans-serif"><?php echo $TrackingNumber; ?></font></div></td>
            <td><div align="center"></div></td>
            <td><font size="2" face="Arial, Helvetica, sans-serif"><?php echo $Description; ?></font></td>
            <td><div align="center"><font size="2" face="Arial, Helvetica, sans-serif"><?php echo $charge; ?></font></div></td>
            <td><div align="center"><font size="2" face="Arial, Helvetica, sans-serif"><?php echo $svc; ?></font></div></td>
            <td><div align="center"><font size="2" face="Arial, Helvetica, sans-serif"><?php echo $grat; ?></font></div></td>
            <td><div align="center"><font size="2" face="Arial, Helvetica, sans-serif"><?php echo $tax; ?></font></div></td>
            <td><div align="center"><font size="2" face="Arial, Helvetica, sans-serif"><?php echo $Payments; ?></font></div></td>
          </tr>
          <tr valign="top"> 
            <td>&nbsp;</td>
            <td>&nbsp;</td>
            <td>&nbsp;</td>
            <td>&nbsp;</td>
            <td>&nbsp;</td>
            <td>&nbsp;</td>
            <td>&nbsp;</td>
            <td>&nbsp;</td>
            <td>&nbsp;</td>
          </tr>
        </table>

I want to structure this so it pull in all the Child Nodes from the Line NUMBERs, if they exist. then I would like the table to generate ROWS for each Line NUMBER found and display the relevant data. Can anyone help with this?

77

Answer

Solution:

Thanks Marc B, I used Xpath to get all the data:

$Linequery = $member->xpath('BillingInfo/Details/Line[@NUMBER] ');

then I replaced my old php statements such as:

<?php echo $tax; ?>

with

<?php foreach($Linequery as $Line) { echo $Line->Othertaxes; echo "<br>"; } ?>

Seems to do exactly what I want. Thanks for pointing me in the right direction!

People are also looking for solutions to the problem: php - mysql: store a DEFAULT value as a variable

Source

Didn't find the answer?

Our community is visited by hundreds of web development professionals every day. Ask your question and get a quick answer for free.

Ask a Question

Write quick answer

Do you know the answer to this question? Write a quick response to it. With your help, we will make our community stronger.

Similar questions

Find the answer in similar questions on our website.