我第一次使用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 />";
}
}
答案 0 :(得分:1)
好的,经过大量的反复试验,我找到了解决方案。
显然有几种方法可以通过调用children()
来获取子元素,然后这将使该级别的所有子项都可用。
这就是我得到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
答案 1 :(得分:1)
$xml
本身代表根节点,在您的情况下为<dni-listings>
,因此请将其留在路径中:
$dates = $xml->{'get-listings-by-day'}->current->date
会给你日期。显示所有日期:
foreach ($dates as $date) echo $date;
答案 2 :(得分: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];