0

如何使用 PHP 从 XML 文件中查找和获取“美元”、“英镑”和“欧元”的货币?

我的 XML 文件如下所示:

<?xml version="1.0" encoding="ISO-8859-2"?>
<tabela_kursow typ="A" uid="13a033">
   <numer_tabeli>033/A/NBP/2013</numer_tabeli>
   <data_publikacji>2013-02-15</data_publikacji>
   <pozycja>
      <nazwa_waluty>bat (Tajlandia)</nazwa_waluty>
      <przelicznik>1</przelicznik>
      <kod_waluty>THB</kod_waluty>
      <kurs_sredni>0,1052</kurs_sredni>
   </pozycja>
   <pozycja>
      <nazwa_waluty>dolar amerykański</nazwa_waluty>
      <przelicznik>1</przelicznik>
      <kod_waluty>USD</kod_waluty>
      <kurs_sredni>3,1398</kurs_sredni>
   </pozycja>

文件来自这里:波兰国家银行

我下载文件并将其保存在我的服务器上:

$basedir = "/mypath/www/dirname";

$sxe = new SimpleXMLElement("http://www.nbp.pl/kursy/xml/LastA.xml", null, true);

file_put_contents($basedir."/subdirname/output.xml", $sxe->asXML());

使用下载的 XML 文件如何<kurs_sredni>仅获得<kod_waluty>= USD、EUR、GBP?

4

2 回答 2

1

你可以用这样的东西阅读。这不是完整的代码,请填补空白:

$doc = new DOMDocument();
$doc->load( $pathFileName );

$pozycjas = $doc->getElementsByTagName( "pozycja" );

foreach($pozycjas as $eachPozycja)
{
  //readef fields
  $kod_waluty = $eachPozycja->getElementsByTagName( "kod_waluty " )->item(0)->nodeValue;

  if($kod_waluty is value u want)
       //read and store kurs_sredni
       $kurs_sredni= $eachPozycja->getElementsByTagName( "kurs_sredni" )->item(0)->nodeValue;
}
于 2013-02-15T21:28:02.560 回答
0

您可以通过遍历所有元素来执行此操作,检查当前元素是否符合您的条件,然后提取感兴趣的数据:

$sxe = new SimpleXMLElement("http://www.nbp.pl/kursy/xml/LastA.xml", null, true);

$accept = array_flip(explode(',', 'USD,EUR,GBP'));

foreach($sxe->pozycja as $pozycja)
{
    $currency = (string) $pozycja->kod_waluty;
    if (isset($accept[$currency])) {
        $accept[$currency] = (string) $pozycja->kurs_sredni;
    }
}

print_r($accept);

这给了你:

Array
(
    [USD] => 3,1398
    [EUR] => 4,1852
    [GBP] => 4,8620
)

如果您只想删除 XML 元素并再次保存 XML(如您在问题中建议的那样),则根本不需要过滤数据。只需存储未经过滤的 XML,它不是任何类型的大文件。

于 2013-02-15T23:10:22.973 回答