2011-08-25 72 views
2

一个XML文件,我有一个这样的XML文件:搜索使用PHP

<quotes> 
    <quote> 
    <symbol>7UP</symbol> 
    <change>0</change> 
    <close>45</close> 
    <date>2011-08-24</date> 
    <high>45</high> 
    </quote> 
</quotes> 

我想symbol这份文件搜索并获取匹配close值,在PHP。

谢谢。

+1

你是什么意思'基于“符号”'? 注意:如果可能的话,不会伤害提高您的接受评级。 – Pete171

+0

[使用XPath匹配基于兄弟值的节点]的可能重复(http://stackoverflow.com/questions/912194/matching-a-node-based-on-a-siblings-value-with-xpath) –

+0

我不知道'基于'符号''是什么意思。 – TRiG

回答

7

使用XPath。

使用SimpleXML:

$sxml = new SimpleXMLElement($xml); 
$close = $sxml->xpath('//quote[symbol="7UP"]/close/text()'); 
echo reset($close); // 45 

使用DOM:

$dom = new DOMDocument; 
$dom->loadXML($xml); 
$xpath = new DOMXPath($dom); 
$close = $xpath->query('//quote[symbol="7UP"]/close/text()')->item(0)->nodeValue; 
echo $close;  // 45 

...的具体数值,与DOM,你可以做的(由@fireeyedboy的建议):

$close = $xpath->evaluate('number(//quotes/quote[symbol="7UP"]/close/text())'); 
echo $close;  // 45 
+0

+1好的答案。我会发布一个替代方案,但是如果您喜欢,可以将其添加到您的答案中:'$ close = $ xpath-> evaluate('number(/ quotes/quote [symbol =“7UP”] [1]/close/text())');'(当然是DOMXPath) –

+0

完成。感谢您的建议。 – netcoder

+0

这里是我的代码,bur我有错误'公共函数getStock($符号) \t { \t \t $ api = file_get_contents(“http://stocks.com”); \t \t $ sxml = new SimpleXMLElement($ api); \t \t $ close = $ sxml-> xpath(“// quote [symbol =”。$ symbol。“]/close/text()”); \t \t return reset($ close); // 45 \t}' – Cyberomin

1

您可以将您的XML文件解析为对象或数组。在PHP中使用起来更容易。 PHP有simpleXML对于这一点,这是默认启用:

http://www.php.net/manual/en/simplexml.installation.php

例子:

$xml = new SimpleXMLElement($xmlstr); 

foreach ($xml->quotes->quote as $quote) 
{ 
    // Filter the symbol 
    echo ((string) $quote->symbol === '7UP') 
    ? $quote->close 
    : 'something else'; 
}