2

所以我没有任何使用 php 读取 xml 的经验,我一直在做一些研究,阅读一些教程,但我想确定一件事。现在我在下面有这个 xml 代码(file.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>

所以我访问例如 temp on location code="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 从该特定位置检索数据,而不使用索引 0 1 2 3 ...

谢谢你。

4

2 回答 2

1

您想使用 xpath 来查询 XML 中的值。

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

您可以在 PHP 文档XPath中找到更多信息

于 2012-12-20T23:11:32.793 回答
1

SimpleXML框架包含一个SimpleXMLElement类。

请使用SimpleXMLElement 的 path()方法和此处描述的Xpath 表达式

此代码来自 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
于 2012-12-20T23:09:25.203 回答