2

这是我第一次使用 XML 文件,我正在使用 SimpleXML。

我的印象是做 $xml->dni-listings->get-listings-by-day->current->date是可能的?但我不知道该怎么做。目前,我设法做到这一点的唯一方法是使用以下代码。但我发现它对于一些应该更简单的东西来说太啰嗦了?

我的 XML 文件在这里http://www.dmax.it/tvl-fe/day/?type=day&channel_code=DXIT-IT&filter=1130&date=01052013

在此处输入图像描述

$file = file_get_contents ('http://www.dmax.it/tvl-fe/day/?type=day&channel_code=DXIT-IT&filter=1130&date=01052013');
$xml = new  SimpleXMLElement ($file);

foreach($xml->children()->children() as $child)
  {
    echo $child->getName() . "<br />";
    if ('current' == $child->getName()){
        echo $child->date . "<br />";
    }
}
4

3 回答 3

1

好的,经过大量的试验和错误,我找到了解决方案。

显然,有几种方法可以访问子元素,一种是通过调用children()this 来使该级别的所有子元素可用。

这就是我得到的方式date

$xml->children()->children()->current->date;

对于连字符属性,这是我访问它们的方式:

$xml->children()->children()->{'previous-date'}->formatted;

我还发现了另一种方法

$namespacesMeta = $xml->getNamespaces(true);
$xml->children(@$namespacesMeta['dni-listings'])->children(@$namespacesMeta['get-listings-by-day'])->children(@$namespacesMeta['current'])->date;

我把 @ 放在变量之前,因为否则我会得到这个Notice: Undefined index: get-listings-by-day in C:\xampp\htdocs\test.php on line 8,但这是另一种方法

我原来的问题的问题是因为事情是连字符的,我的路径应该看起来更像

$xml->{'get-listings-by-day'}->current->date 
于 2013-05-01T13:00:37.057 回答
1

$xml在您的情况下,它本身代表根节点<dni-listings>,因此请将其留在路径中:

$dates = $xml->{'get-listings-by-day'}->current->date

会给你日期。显示所有日期:

foreach ($dates as $date) echo $date;

看到它工作:http ://codepad.viper-7.com/xTyeML

于 2013-05-01T13:06:17.817 回答
0

请注意,不建议将 XML::Simple 用于新应用程序。

我使用 Perl 的哈希值访问项目。对于简单的情况,我使用:

$xml = new  SimpleXMLElement ($file, keyattr => [] );
$xml->{dni-listings}->{get-listings-by-day}->{current}->{date};

如果您想将 XML 写回而不是将其折叠成单个标记,您可能需要使用 ForceArray 选项。这有点难,但效果很好。

$xml = new  SimpleXMLElement ($file, ForceArray => 1, keyattr => [] );
$xml->{dni-listings}[0]->{get-listings-by-day}[0]->{current}[0]->{date}[0];
于 2013-10-08T13:04:25.510 回答