2010-11-04 4 views
0

Надеюсь, что название было ОК.Создание файла XML через SimpleXML & simple_html_dom

Моя проблема заключается в том, что я хочу, чтобы сгенерировать файл XML, который содержит все ISO 4217 валютах, в том числе их наименование, код и странах они используются.

Для этого я использую simple_html_dom, чтобы захватить HTML и выберите конкретные данные со страницы. Затем, используя SimpleXML для построения XML. Я хотел бы выход, как так:

<currency> 
    <code>USD</code> 
    <name>United States Dollars</name> 
    <location>United States of America</location> 
</currency> 

На данный момент я могу заселить код для всех кодов, но не могу получить имена или местоположения, а также коды, завернутые в валюте

здесь является текущий код у меня есть, то второй цикл возвращает имена валюты, но я не могу понять, как поместить это ниже код тега в валюте:

<?php 


//Source: simplehtmldom.sourceforge.net 
require('simple_html_dom.php'); 

//177 currencies 
//set URL to parse 
$url = "http://en.wikipedia.org/wiki/ISO_4217"; 
$html = file_get_html($url); 
//find all <td> elements that are nested within <table class="wikitable"><tr> and put them into an array 
$content = $html->find('table.wikitable tr td'); 


$newsXML = new SimpleXMLElement("<currencies></currencies>"); 
$newsXML->addAttribute('type', 'ISO_4217'); 
Header('Content-type: text/xml'); 

//loop to add each currency code in <currency><code>HERE</code></currency> 
//this loop gets all the codes of the currencies 
for($i = 0; $i <= 885; $i += 5){ 
    $currency = $newsXML->addChild('currency'); 
    $code = $currency->addChild('code',strip_tags($content[$i])); 
} 
//this loop gets all the names of the currencies 
for($n = 3; $n <= 531; $n += 5){ 
    $name = $currency->addChild('name',strip_tags($content[$n])); 
} 

//echo the XML 
echo $newsXML->asXML(); 



?> 

Я только начал изучать PHP в месяц или так и назад, так что по достоинству оцените любой совет или точку в правильном направление.

(Надеюсь, что соглашение об именах форматирования/названия в порядке).

+2

Уход за обучением 'XSLT'? Кажется идеальным кандидатом на это ... Если вы хотите придерживаться своего текущего метода: не запрашивайте запрос 'td', запрос' tr' и внутри цикла foreach через эти ' tr's, получить содержимое 1-го, 4-го и 5-го '' td' -учетов этого узла 'tr'. – Wrikken

+0

* (related) * [Лучшие методы анализа HTML] (http://stackoverflow.com/questions/3577641/best-methods-to-parse-html/3577662#3577662) – Gordon

+0

Из-за моей высокой нагрузки обучения XSLT не будет " идеальный. Я попробую взять tr tr вместо этого, мой текущий метод не возможен тогда? Благодарим вас за ссылку Gordon, которую я буду смотреть и использовать в будущем. – Daniel

ответ

0

Я так и не нашел ответ на этот вопрос и только что закончил с XML, а не строит его через SimpleHTMLDom.

0

Ваша проблема заключается в том, что $currency во втором контуре является статическим, в результате чего-то вроде

<currency> 
    <code>foo</code> 
</currency> 
<currency> 
    <code>bar</code> 
</currency> 
<currency> 
    <code>baz</code> 
    <name>nfoo</name> 
    <name>nbar</name> 
    <name>nbaz</name> 
</currency> 

Вы должны добавить как имя и код к тому же $currency объекта.

Смежные вопросы