【问题标题】:Searching an XML file using PHP [closed]使用 PHP 搜索 XML 文件 [关闭]
【发布时间】:2011-08-25 14:50:11
【问题描述】:

我有一个这样的 XML 文件:

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

我想通过symbol搜索这个文档,并在PHP中获得匹配的close值。

谢谢。

【问题讨论】:

  • “基于“符号”是什么意思?注意:如果可能的话,提高您的接受率不会有什么坏处。
  • 我不知道你所说的“基于“符号”是什么意思。
  • 当然基于符号的内容。我的意思是,我的所有问题都是为了清楚起见,但是如果您以前处理过查询 XML,那么这个问题真的不是那么很难弄清楚。 (是的,我在 netcoder 编辑之前阅读了这个问题。)
  • 就像 netcoder 在这里说的。使用 XPath。这类似于 SQL 查询语法,但适用于 XML 文档。

标签: php xml


【解决方案1】:

使用 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

【讨论】:

  • +1 不错的答案。我打算发布一个小替代品,但如果您愿意,可以将其添加到您的答案中:$close = $xpath-&gt;evaluate( 'number(/quotes/quote[symbol="7UP"][1]/close/text())' );(当然是用于 DOMXPath)
  • 完成。感谢您的建议。
  • 这是我的代码,但我有错误public function getStock($symbol) { $api = file_get_contents("http://stocks.com"); $sxml = new SimpleXMLElement($api); $close = $sxml-&gt;xpath("//quote[symbol=".$symbol."]/close/text()"); return reset($close); // 45 }
  • @Cyber​​omin: http://stocks.com 不会返回具有您在问题中提供的 XML 结构的文档。它返回一个常规的 HTML 文档,其中没有 &lt;quotes&gt;&lt;quote&gt; 等...元素。
  • 您需要将$symbol 括在引号中:$sxml-&gt;xpath("//quote[symbol='".$symbol."']/close/text()")。有问题再问新问题,不要在cmets中贴长代码块。
【解决方案2】:

您可以只将 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';
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-12-20
    • 2014-01-09
    • 1970-01-01
    相关资源
    最近更新 更多