如何从XML文件中查找和获取属性

时间:2013-02-15 21:05:05

标签: php xml

如何使用PHP从XML文件中查找并获取“USD”,“GBP”和“EUR”的货币?

我的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>

文件来自此处:Polish National Bank

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

$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>

2 个答案:

答案 0 :(得分: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;
}

答案 1 :(得分: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,它不是任何类型的大文件。