我有一个XML文档,如下所示:
<?xml version='1.0' encoding='UTF-8' standalone='yes' ?>
<smses count="1992">
<sms protocol="0" address="5558675309" date="1309444177931" type="1" subject="null" body="text message" toa="0" sc_toa="0" service_center="null" read="1" status="-1" locked="0" />
</smses>
我想提取每条<sms>
行的地址,日期和正文,大约有8000行。我不确定最好的方法,所以如果有人能指出我正确的方向,我会很感激。不需要特定的代码,只需要方向。我很难过。
答案 0 :(得分:2)
$dom = new DOMDOcument();
// Load your XML as a string
$dom->loadXML($s);
// Create new XPath object
$xpath = new DOMXpath($dom);
// Query for Account elments inside NewDataSet elemts inside string elements
$result = $xpath->query("/smses");
// Note there are many ways to query XPath using this syntax
// Iterate over the results
foreach($result as $node)
{
// Obtains item for sms tags here
}
答案 1 :(得分:2)
您可以使用PHP的SimpleXML扩展名来解析此问题。有关简介,请参阅"Basic SimpleXML usage"。
以下是一些让您入门的代码(array_map
需要PHP&gt; = 5.3):
$smses = new SimpleXMLElement($xml_str);
$smses_parsed = array_map(function($sms_el) {
return array('address' => (string)$sms_el['address'],
'date' => (int)$sms_el['date'],
'body' => (string)$sms_el['body']);
}, $smses);
print_r($smses_parsed[0]); /* => array("address" => "5558675309",
"date" => 1309444177931,
"body" => "text message") */
一个注意事项:SimpleXML是一个严格的解析器。如果您的XML有些格式错误,那么DOMDocument
可能会更幸运。 (但是,考虑到您发布的简单文档结构,我不希望这种情况发生在这里。)