Разбор XML-данных с помощью php - PullRequest
0 голосов
/ 01 декабря 2011

Я пытаюсь извлечь текст из одного элемента в XML-файле, я смог вытащить весь файл, но мне действительно нужно всего несколько строк из файла ...

На этой странице я смог вытащить весь XML-файл (http://smyrnainlet.com/testing.php)

Но когда я пытаюсь выделить одну строку из этого файла. http://smyrnainlet.com/current_data.php

Это ошибка, которую я получаю:

Неустранимая ошибка: вызов функции-члена getbyElementID () для необъекта в /home/content/74/8620474/html/current_data.php в строке 9

Если бы кто-нибудь мог мне помочь, это было бы удивительно, я бы боролся с этим часами.

Это мой код:

<?php

function startElemHandler($parser, $name, $attribs) 
{
    if (strcasecmp($name, "current_observation") ==0 ) {
        echo "<div id='waves'>\n";
    }
    if (strcasecmp($name, "wave_height_ft") ==0) {
            $waveHeight->getbyElementID("wave_height_ft");

            echo $waveHeight->asXML();
    }

}

function endElemHandler($parser, $name)
{ 
    if (strcasecmp($name, "current_observation") ==0 ) {
        echo "</div>";
    }

}

$parser = xml_parser_create();
xml_set_element_handler($parser, startElemHandler, endElemHandler);
xml_parser_set_option($parser, XML_OPTION_CASE_FOLDING, 0);

$strXML = implode("",file("http://www.weather.gov/xml/current_obs/41009.xml"));

xml_parse($parser, $strXML);

xml_parser_free($parser);


?>

Ответы [ 2 ]

1 голос
/ 01 декабря 2011

У вас есть несколько фундаментальных недостатков в вашем коде, но вы по сути спрашиваете, как анализировать XML-файл. Я предлагаю использовать PHP DOMDocument с DOMXPath для извлечения необходимых данных. Вот пример кода:

$xml = file_get_contents('weather.xml');
$dom = new DOMDocument();
@$dom->loadHTML($xml);
$domx = new DOMXPath($dom);
$entries = $domx->evaluate("//wave_height_ft");
$arr = array();
foreach ($entries as $entry) {
    $arr[] = '<' . $entry->tagName . '>' . $entry->nodeValue .  '</' . $entry->tagName . '>';
}
print_r($arr);
0 голосов
/ 01 декабря 2011

$ waveHeight, кажется, не определено (не входит в область действия), когда вы пытаетесь использовать его!

Вы можете

  • передать его в качестве аргумента
  • используйте оператор global
  • создать класс
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...