Проблема парсинга XML с использованием SimpleXMLElement - PullRequest
0 голосов
/ 20 августа 2011

Я использую SimpleXMLElement для анализа XML-файла (XBRL основан на XML).

$url = 'http://sec.gov/Archives/edgar/data/104169/000119312511158587/wmt-20110430.xml';
$sec_file = file_get_contents($url) or die('Could not access file: $url');
$xml = new SimpleXMLElement($sec_file);
foreach($xml->{'us-gaap:InterestExpenseDebt'} as $item) {
     print_r($item);
 }

Однако я не могу получить значение тега us-gaap:InterestExpenseDebt.

Он определен в XML следующим образом:

<us-gaap:InterestExpenseDebt contextRef="Duration_2_1_2010_To_4_30_2010" unitRef="Unit12" decimals="-6">455000000</us-gaap:InterestExpenseDebt>
<us-gaap:InterestExpenseDebt contextRef="Duration_2_1_2011_To_4_30_2011" unitRef="Unit12" decimals="-6">491000000</us-gaap:InterestExpenseDebt>

Пространство имен в этом XML-файле:

<xbrli:xbrl xmlns:cvs="http://www.info.cvscaremark.com/20110630" xmlns:link="http://www.xbrl.org/2003/linkbase" xmlns:us-gaap="http://fasb.org/us-gaap/2011-01-31" xmlns:xbrldi="http://xbrl.org/2006/xbrldi" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xbrli="http://www.xbrl.org/2003/instance" xmlns:iso4217="http://www.xbrl.org/2003/iso4217" xmlns:dei="http://xbrl.sec.gov/dei/2011-01-31" xmlns:xlink="http://www.w3.org/1999/xlink">

Я добавил это, но оно все еще не работает:

$xml->registerXPathNamespace('us-gaap', "http://fasb.org/us-gaap/2011-01-31");

Есть предложения?

Спасибо!

Ответы [ 2 ]

1 голос
/ 20 августа 2011

Попробуйте извлечь узлы, используя xpath :

$url = 'http://sec.gov/Archives/edgar/data/104169/000119312511158587/wmt-20110430.xml';
$sec_file = file_get_contents($url) or die('Could not access file: $url');
$xml = new SimpleXMLElement($sec_file);
$xml->registerXPathNamespace('us-gaap', "http://fasb.org/us-gaap/2011-01-31");

foreach($xml->xpath('//us-gaap:InterestExpenseDebt') as $item) {
     print_r($item);
}

Кроме того, вы можете заключить строку $xml = new SimpleXMLElement($sec_file); в предложение try-catch на случай, если файл XML по какой-то причине недопустим.

1 голос
/ 20 августа 2011

Попробуйте зарегистрировать пространство имен.Посмотрите на http://www.php.net/manual/en/simplexmlelement.registerxpathnamespace.php.Может быть, это поможет.

...