使用简单的XML获取XML值

时间:2013-05-01 12:25:09

标签: php xml simplexml

我第一次使用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

enter image description here

$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 />";
    }
}

3 个答案:

答案 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;

看到它有效:http://codepad.viper-7.com/xTyeML

答案 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];