0

我正在寻找过滤此 xml在此处输入链接描述过滤 xml 的最佳方法是:-运行所有 xml 并影响变量中的值-之后我们用此变量重写此 xml

还有其他方法吗?对于这种方法,我使用了这样的 dom:

    $flux= new DOMDocument();
if ($flux->load('http://xml.weather.com/weather/local/FRXX0076?unit=m&hbhf=6&ut=C'))  
{$loc=$flux->getElementsByTagName('t');
  foreach($loc as $lo)
    echo $lo->firstChild->nodeValue . "<br />";
}

在这段代码中我试图显示<t>但有 2 个应答器<t><hour>因此我有两个值<t>而不是第一个孩子<hour>

4

1 回答 1

1

简短的回答:

$flux= new DOMDocument();
if ($flux->load('http://xml.weather.com/weather/local/FRXX0076?unit=m&hbhf=6&ut=C'))  
{
    $xpath = new DomXPath($flux);

    $elements = $xpath->query("*/hour/t[1]");

    if (!is_null($elements)) {
      foreach ($elements as $element)
      {
        echo "<br/>[". $element->nodeName. "]";

        $nodes = $element->childNodes;
        foreach ($nodes as $node)
        {
          echo $node->nodeValue. "\n";
        }
      }
    }
}

我想你应该知道从这一点开始:)

更高级的版本将是对所有小时元素(“*/小时”)发出 XPath 查询,然后在 foreach 中为每个小时元素在此元素上下文中发出另一个 xpath 查询($xpath->query("*/t[1]", $hourElement);)。这样,您还可以访问小时对象,例如可以显示这个小时。

更新

更简单的 foreach 版本:

if (!is_null($elements)) {
    foreach ($elements as $element)
    {
        echo "<br/>".$element->nodeValue;
    }
}
于 2012-05-19T00:29:42.897 回答