2012-11-04 3 views
0

J'ai un fichier.txt qui contient les éléments suivants:convertir le fichier texte au format XML en 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] 
... 

Je voudrais extraire les données de celui-ci pour l'analyser dans un fichier xml ou base de données plus tard. J'ai essayé d'utiliser des fonctions php comme substr et strrpos mais j'ai toujours des problèmes car la longueur des valeurs comme altitude et climbrate peut être "20", "2" ou "200". Aussi lors de l'utilisation de strrpos et la valeur de "l'aiguille" se produit plusieurs fois; Je n'ai pas la bonne valeur.

Quelqu'un est-il déjà tombé sur ce type de problème?

(edit: je charge le fichier dans une chaîne de php)

+0

Essayez d'explode() avec delimiter "="? – janenz00

Répondre

1

Ou vous pouvez essayer ceci:

<?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; c'est exactement ce dont j'ai besoin – Thomas

2

Vous pouvez essayer ceci:

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

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

ce n'est pas un tableau difficile; c'est une chaîne – Thomas

+0

Cela prend une chaîne au format INI (que votre fichier file.txt est) et convertit la chaîne en un tableau et il est ensuite converti en un fichier XML. – narruc

+0

@ThomasVerbeke Je l'ai mis à jour pour qu'il prenne maintenant une chaîne INI plutôt qu'un fichier INI. – narruc

Questions connexes