2012-11-04 125 views
0

我有一個包含以下內容的file.txt的:轉換文本文件,XML在PHP

[General] 
FileVersion=3 
NumberOfWaypoints=12 
[Point1] 
Latitude=50.8799722 
Longitude=4.7008664 
Radius=10 
Altitude=25 
ClimbRate=30 
DelayTime=2 
WP_Event_Channel_Value=100 
Heading=0 
Speed=30 
CAM-Nick=0 
Type=1 
Prefix=P 
[Point2] 
... 

我想從中提取數據後把它解析XML文件或數據庫。

我試過使用php函數如substr和strrpos,但我總是遇到麻煩,因爲像海拔高度和爬升值的長度可能是「20」或「2」或「200」。同樣當使用strrpos並且「針」的值多次出現時;我沒有得到正確的價值。

有人遇到過這種類型的問題嗎?

(編輯:我加載的文件到一個PHP字符串)

+0

儘量爆炸()與分隔符「=」? – janenz00

回答

1

或者你可以試試這個:

<?php 
//or create $file from file_get_contents('file.txt'); 
$file = "[General] 
FileVersion=3 
NumberOfWaypoints=12 
[Point1] 
Latitude=50.8799722 
Longitude=4.7008664 
Radius=10 
Altitude=25 
ClimbRate=30 
DelayTime=2 
WP_Event_Channel_Value=100 
Heading=0 
Speed=30 
CAM-Nick=0 
Type=1 
Prefix=P 
[Point2]"; 

//or create $array with file('file.txt'); 
$array = explode("\n",$file); 

//Create and output xml from the given array 
header('Content-Type: text/xml'); 
$xml = new SimpleXMLElement('<?xml version="1.0" encoding="UTF-8"?><points/>'); 

foreach($array as $k=>$v){ 
    if(substr($v,0,1)=='['){ 
     $node = $xml->addChild(str_replace(array('[',']'),'',$v)); 
    }else{ 
     list($key,$value) = explode('=',$v,2); 
     $node->addChild($key, trim($value)); 
    } 
} 

//DOMDocument to format code output 
$dom = new DOMDocument('1.0'); 
$dom->preserveWhiteSpace = false; 
$dom->formatOutput = true; 
$dom->loadXML($xml->asXML()); 

echo $dom->saveXML(); 

/*Result: 
<?xml version="1.0" encoding="UTF-8"?> 
<points> 
    <General> 
    <FileVersion>3</FileVersion> 
    <NumberOfWaypoints>12</NumberOfWaypoints> 
    </General> 
    <Point1> 
    <Latitude>50.8799722</Latitude> 
    <Longitude>4.7008664</Longitude> 
    <Radius>10</Radius> 
    <Altitude>25</Altitude> 
    <ClimbRate>30</ClimbRate> 
    <DelayTime>2</DelayTime> 
    <WP_Event_Channel_Value>100</WP_Event_Channel_Value> 
    <Heading>0</Heading> 
    <Speed>30</Speed> 
    <CAM-Nick>0</CAM-Nick> 
    <Type>1</Type> 
    <Prefix>P</Prefix> 
    </Point1> 
    <Point2/> 
</points> 
*/ 
+0

Thx;這正是我需要的 – Thomas

2

你可以試試這個:

<?php 
$array = parse_ini_string($string); 

$xml = new SimpleXMLElement('<root/>'); 
array_walk_recursive($array, array ($xml, 'addChild')); 
echo $xml->asXML(); 
?> 
+0

這不是一個艱難的陣列;它是一個字符串 – Thomas

+0

這需要一個INI格式的字符串(你的file.txt是),並將字符串轉換爲數組,然後將其轉換爲XML文件。 – narruc

+0

@ThomasVerbeke我已經更新它,所以它現在需要INI字符串而不是INI文件。 – narruc