2011-12-08 43 views
0

嗨,想知道是否有人可以幫助我。將XML Feed的某些值一起添加,然後輸出

第一下面的代碼基本上計算每個XML記錄和輸出在所需FORMATT

舊代碼

$ch = curl_init(); 
curl_setopt($ch, CURLOPT_URL, 'http://xxxxx'); 
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); 
$xml_string = curl_exec ($ch); 
curl_close ($ch); 

// parse data 
$xml=simplexml_load_string($xml_string); 

// fix to n slots, zero padded 
$slots=6; 
$counter = substr((string)(pow(10,$slots)+count($xml)),1,$slots); 

for($c=0; $c<strlen($counter); $c++) 
{ 
    echo("<span>".$counter[$c]."</span>"); 
} 

出把

<span>1</span><span>3</span><span>5</span><span>6</span><span>8</span><span>8</span> 

,這是一切OK,但現在XML飼料已經改變,正在輸出下面。

<Data> 
    <Row> 
     <Column name="cam" type="xs:int">000</Column> 
     <Column name="camN" type="xs:string">hello</Column> 
     <Column name="numer" type="xs:int">1</Column> 
    </Row> 
    <Row> 
     <Column name="cam" type="xs:int">000</Column> 
     <Column name="camN" type="xs:string">hello</Column> 
     <Column name="numer" type="xs:int">985</Column> 
    </Row> 
    <Row> 
     <Column name="cam" type="xs:int">000</Column> 
     <Column name="camN" type="xs:string">hello</Column> 
     <Column name="numer" type="xs:int">1</Column> 
    </Row>  
</Data> 

我需要相同的輸出發生,但不知道我怎麼把數值從每個記錄+它們togther,然後輸出他們確保我有6個charactures即使它結束了000005作爲一種價值

乾杯

更新


抱歉,我需要將NUMER值加在一起,以得到六君煎所以如果六君煎爲987我需要它輸出:

<span>0</span><span>0</span><span>0</span><span>9</span><span>8</span><span>7</span>

+0

我不明白所需的輸出。應該總結新XML上的哪些值? – nickb

+0

對不起,我的帖子對不起,錯過了關閉 – odd

回答

1

您可以使用XPath來抓住你想要的節點,就像這樣:

$xml = simplexml_load_string($xml); 
$elements = $xml->xpath("/Data/Row/Column[@name='numer']"); 
$sum = 0; 
foreach($elements as $el) 
{ 
    $sum += $el[0]; 
} 
echo $sum; // Prints 12660 

現在,讓你的期望的輸出,墊零數,將它分成1個字符的塊,並將其輸出,如所以:

$formatted = sprintf('%06d', $sum); 
echo '<span>' . implode('</span><span>', str_split($formatted)) . '</span>'; 
+0

謝謝,即使價值是400,我總是會確保它的6個charactures,我需要它輸出000400,並跨越像上面這樣的價值。 – odd

+0

對sprintf的調用將處理':)' - 這就是爲什麼它具有'%06d',這意味着將數字格式化爲寬度爲6的十進制值,並且如果數字不是6位數。 – nickb

+0

非常完美的謝謝你對我的幫助,今天我學到了一些新東西....現在它可以導出6位數字,但由於某些原因,它們都是0,它們應該是一個值,因爲我知道xml有值得加起來,讓我看看這個 – odd

2

SimpleXml是做最簡單的方法。鑑於你提供的XML:

$xml = ' 
<Data> 
    <Row> 
     <Column name="cam" type="xs:int">000</Column> 
     <Column name="camN" type="xs:string">hello</Column> 
     <Column name="numer" type="xs:int">5220</Column> 
    </Row> 
    <Row> 
     <Column name="cam" type="xs:int">000</Column> 
     <Column name="camN" type="xs:string">hello</Column> 
     <Column name="numer" type="xs:int">4220</Column> 
    </Row> 
    <Row> 
     <Column name="cam" type="xs:int">000</Column> 
     <Column name="camN" type="xs:string">hello</Column> 
     <Column name="numer" type="xs:int">3220</Column> 
    </Row>  
</Data> 
'; 

$xml = simplexml_load_string($xml); 
$numer_sum = 0; 

// sums the value of columns 
foreach ($xml->Row as $row) { 
    $numer_sum += (int)$row->Column[2]; 
} 

或者,你可以使用XPath以確保你總是使用總結NAME =「NUMER」列元素即使的XML列的順序:

$xml = simplexml_load_string($xml); 

// get only the column elements with name="numer" 
$xpath_result = $xml->xpath('Row/Column[@name="numer"]'); 
$sum = 0; 

foreach ($xpath_result as $numer) { 
    $sum += (int)$numer[0]; 
} 

echo $sum; 
+0

感謝您的回覆我已經問過一個問題重新格式化 – odd

+0

嗯,你的問題明確表示你已經控制了代碼的一部分。 XML中的更改不會影響串聯字符串的能力。我無法爲你編寫代碼,這不是你想要的。 – rdlowrey

+0

非常感謝你在這方面的幫助 – odd

相關問題