使用PHP自定义的Xml解析器

时间:2014-09-09 13:47:50

标签: php html xml

我的xml标记格式为

<transcript>
<messages>
    <message>
        <to>user1@localhost.local</to>
        <from>user2@localhost.local</from>
        <body>hello</body>
        <date>2014-09-09 14:14:17.652 IST</date>
    </message>
    <message>
        <to>user2@localhost.local</to>
        <from>user1@localhost.local</from>
        <body>hi dear</body>
        <date>2014-09-10 14:14:17.652 IST</date>
    </message>
</messages>
</transcript>

我想加载此xml文件并以

之类的格式显示结果
2014-09-09 - Tuesday
(2:14 PM ) user1 : hello
2014-09-10 - Wednesday
(2:14 PM )user2 : hi dear

我试过这个PHP代码

$xml_file_path='filename_with_path';
$XMLReader->open($xml_file_path);
while ($XMLReader->read() && $XMLReader->name !== "transcript");
while ($XMLReader->read() && $XMLReader->name !== "messages");
while ($XMLReader->read() && $XMLReader->name !== "message");
while ($XMLReader->name === "message") {
    $node = new SimpleXMLElement($XMLReader->readOuterXML());
}

但是$ node给我空的结果,我该如何解决它或我错在哪里。

1 个答案:

答案 0 :(得分:0)

我个人讨厌xml,我知道它是一个成熟的标准,但我讨厌使用非原生数据存储。甚至数据库也让我烦恼。

如果我可以稍微重构你的代码......

//This turns your xml into a php object, which can be manipulated more directly
if (file_exists('text.xml')) {
    $xml = simplexml_load_file('text.xml');
}

然后你可以简单地输出

$totalMessages = count( $xml->messages->message );
for($i = 0; $i < $totalMessages; $i++){
    echo "{$xml->messages->message[$i]->date}<br>
    {$xml->messages->message[$i]->from}: {$xml->messages->message[$i]->body}<br><br>";
}   

此输出

2014-09-09 14:14:17.652 IST
user2@localhost.local: hello

2014-09-10 14:14:17.652 IST
user1@localhost.local: hi dear

我把它留给你切片和切块以获得美味。