2012-12-20 111 views
2

所以我没有任何使用PHP读取XML的经验,我一直在做一些研究,阅读一些教程,但有一件事我想确定。 现在我有低于这个XML代码(file.xml):解析来自php的xml数据

<location code="TB0023"> 
    <temp unit="F">15.8</temp> 
    <US>Intermittent clouds</US> 
    </location> 

    <location code="YG0023"> 
    <temp unit="F">23</temp> 
    <US>Mostly Clear</US> 
    </location> 

所以我例如临时访问位置代码= “TB0023” 的方式是这样的:

$open = simplexml_load_file('file.xml'); 
echo $open ->location[0]->temp; 

现在我已经未成想,使其更具可读性一点点做这样的事情(如关联数组以某种方式):

$open = simplexml_load_file('file.xml'); 
echo $open ->location[code="TB0023"]->temp; 

那么,有没有办法使用该标识符TB0023从该规范retreive数据不使用索引0 1 2 3 ...

谢谢。

+2

您需要使用XPath;语法几乎和你写的一样。 – Evert

+0

谢谢。有没有可能让它按照我实际使用的方式工作? – inrob

回答

1

SimpleXML框架包含一个SimpleXMLElement类。

请使用SimpleXMLElement'spath()方法Xpath expressions描述here

从php.net站点

$string = <<<XML 
<a> 
<b> 
    <c>text</c> 
    <c>stuff</c> 
</b> 
<d> 
    <c>code</c> 
</d> 
</a> 
XML; 

$xml = new SimpleXMLElement($string); 

/* Search for <a><b><c> */ 
$result = $xml->xpath('/a/b/c'); 

while(list(, $node) = each($result)) { 
    echo '/a/b/c: ',$node,"\n"; 
} 

/* Relative paths also work... */ 
$result = $xml->xpath('b/c'); 

while(list(, $node) = each($result)) { 
    echo 'b/c: ',$node,"\n"; 
} 

该代码将打印:

/a/b/c: text 
/a/b/c: stuff 
b/c: text 
b/c: stuff 

XPath是标准的技术来定位XML中的元素。

在你的情况,你会使用XPath查询这样的:

/location[@code="TB0023"]/temp 
1

你想使用XPath查询的XML值。

$result = $open->xpath("//location[@code='TB0023']")

你可以找到更多的PHP文件XPath