0

次のファイルを含むfile.txtがあります。

[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ファイルまたはデータベースに解析したいと思います。

substrやstrrposなどのphp関数を使用してみましたが、高度や上昇率などの値の長さが「20」、「2」、「200」になる可能性があるため、常に問題が発生します。また、strrposを使用していて、「needle」の値が複数回発生する場合。正しい値が得られません。

誰かが以前にこのタイプの問題に遭遇しましたか?

(編集:ファイルをphp文字列にロードしました)

4

2 に答える 2

2

あなたはこれを試すことができます:

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

$xml = new SimpleXMLElement('<root/>');
array_walk_recursive($array, array ($xml, 'addChild'));
echo $xml->asXML();
?>
于 2012-11-04T15:07:40.880 に答える
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>
*/
于 2012-11-04T15:13:30.300 に答える