RError.com

RError.com Logo RError.com Logo

RError.com Navigation

  • 主页

Mobile menu

Close
  • 主页
  • 系统&网络
    • 热门问题
    • 最新问题
    • 标签
  • Ubuntu
    • 热门问题
    • 最新问题
    • 标签
  • 帮助
主页 / 问题 / 585551
Accepted
Telion
Telion
Asked:2020-11-01 23:52:57 +0000 UTC2020-11-01 23:52:57 +0000 UTC 2020-11-01 23:52:57 +0000 UTC

由 XML 构成的数组结构的问题

  • 772

我创建一个数组:

$tv = simplexml_load_file('output/'.$xml);

我用 foreach 遍历它:

foreach ($tv as $tvinfo):
if ($tvinfo['channel'] != ''){
$channel=$tvinfo['channel'];
}

但这只是其价值所在的频道或标签的标识符(我不确定)。我正在尝试获取名称,例如“Channel 1”(位于[id])。

echo $tv['channel'][0]->display-name;

但我不知道如何去做。途中有对象,我不知道如何与它们交互,我还没有想出如何在循环中完成所有操作,获取名称而不是标识符。

我附上了 XML 数组结构:

SimpleXMLElement Object
(
    [@attributes] => Array
        (
            [source-info-url] => http://cherrytest.com/
            [source-info-name] => CherryTest
            [generator-info-name] => XMLTV/: tv_grab_na_dd.in,v 1.70 2008/03/03 15:21:41 rmeden Exp $
            [generator-info-url] => http://www.xmltv.org/
        )

    [channel] => Array
        (
            [0] => SimpleXMLElement Object
                (
                    [@attributes] => Array
                        (
                            [id] => Канал 1
                        )

                    [display-name] => Канал 1
                )

            [1] => SimpleXMLElement Object
                (
                    [@attributes] => Array
                        (
                            [id] => Канал 2
                        )

                    [display-name] => Канал 2
                )

        )

    [programme] => Array
        (
            [0] => SimpleXMLElement Object
                (
                    [@attributes] => Array
                        (
                            [start] => 20161104121212 +0200
                            [stop] => 20161105215224 +0200
                            [channel] => 0
                        )

                    [title] => Передача 1
                    [desc] => Описание отсутствует.
                    [date] => 20161104
                    [audio] => SimpleXMLElement Object
                        (
                            [stereo] => stereo
                        )

                )

            [1] => SimpleXMLElement Object
                (
                    [@attributes] => Array
                        (
                            [start] => 20161108121212 +0200
                            [stop] => 20161109215225 +0200
                            [channel] => 0
                        )

                    [title] => Передача 2
                    [desc] => Описание второй передачи. Йеее.
                    [date] => 20161108
                    [audio] => SimpleXMLElement Object
                        (
                            [stereo] => stereo
                        )

                )

            [2] => SimpleXMLElement Object
                (
                    [@attributes] => Array
                        (
                            [start] => 20161112121212 +0200
                            [stop] => 20161113215226 +0200
                            [channel] => 1
                        )

                    [title] => Передача 3
                    [desc] => Описание отсутствует.
                    [date] => 20161112
                    [audio] => SimpleXMLElement Object
                        (
                            [stereo] => stereo
                        )

                )

        )

)

XML 文件本身:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE tv SYSTEM 'xmltv.dtd'>
<tv source-info-url="http://cherrytest.com/" source-info-name="CherryTest" generator-info-name="XMLTV/: tv_grab_na_dd.in,v 1.70 2008/03/03 15:21:41 rmeden Exp $" generator-info-url="http://www.xmltv.org/">
	<channel id="Канал 1">
		<display-name>Канал 1</display-name>
	</channel>
	<channel id="Канал 2">
		<display-name>Канал 2</display-name>
	</channel>
	<programme start="20161104121212 +0200" stop="20161105215224 +0200" channel="0">
		<title lang="ua">Передача 1</title>
		<desc lang="ua">Описание отсутствует.</desc>
		<date>20161104</date>
		<audio>
			<stereo>stereo</stereo>
		</audio>
	</programme>
	<programme start="20161108121212 +0200" stop="20161109215225 +0200" channel="0">
		<title lang="ua">Передача 2</title>
		<desc lang="ua">Описание второй передачи. Йеее.</desc>
		<date>20161108</date>
		<audio>
			<stereo>stereo</stereo>
		</audio>
	</programme>
	<programme start="20161112121212 +0200" stop="20161113215226 +0200" channel="1">
		<title lang="ua">Передача 3</title>
		<desc lang="ua">Описание отсутствует.</desc>
		<date>20161112</date>
		<audio>
			<stereo>stereo</stereo>
		</audio>
	</programme>
</tv>

如果它对任何人都有用,我按照下面描述的方式解决了属性问题,否则非常感谢@Aleksey Shimansky

$number = (int) $tvinfo['channel'];                  //конвертировал в int
$real_channel = $tv->channel[$number]->attributes(); //так как у меня цикл и каналы могут повторятся для разных передач я достаю соответствующий канал
$channel=$real_channel;
php
  • 2 2 个回答
  • 10 Views

2 个回答

  • Voted
  1. Best Answer
    Алексей Шиманский
    2020-11-02T01:06:45Z2020-11-02T01:06:45Z

    对对象的引用必须通过箭头,因此$tv['channel']是不正确的。需要$tv->channel。内部也是如此,除非名字是复合的。在这种情况下,您需要解决->{'ИМЯ_ЭЛЕМЕНТА'},例如

    echo $tv->channel[0]->{'display-name'};
    

    有一种访问属性的方法attributes()。例如属性访问channel[0]看起来像

    $tv->channel[0]->attributes();
    

    全部的:

    // каналы 
    foreach($tv->channel as $test) {
        echo 'Название канала: '.$test->{'display-name'} .' <br/>' ;
        echo 'Атрибуты канала: <br/>';
        foreach($test->attributes() as $key => $val) {
            echo $key . ' = ' . $val ."; ";
        }
        echo '<br/><br/>';
    }
    

    会带出

    Название канала: Канал 1 
    Атрибуты канала: 
    id = Канал 1; 
    
    Название канала: Канал 2 
    Атрибуты канала: 
    id = Канал 2; 
    
    • 1
  2. Bookin
    2020-11-02T01:05:37Z2020-11-02T01:05:37Z
    (string)$tv->channel[0]->{'display-name'};
    

    在一个循环中:

    $tv = simplexml_load_file('output/'.$xml);
    foreach($tv->channel as $channel){
        var_dump((string)$channel->{'display-name'});
    }
    

    或者

    $tv = simplexml_load_file('output/'.$xml);
    foreach($tv->channel as $channel){
        $attr = $channel->attributes();
        var_dump((string)$attr['id']);
    }
    

    例子

    • 0

相关问题

Sidebar

Stats

  • 问题 10021
  • Answers 30001
  • 最佳答案 8000
  • 用户 6900
  • 常问
  • 回答
  • Marko Smith

    如何停止编写糟糕的代码?

    • 3 个回答
  • Marko Smith

    onCreateView 方法重构

    • 1 个回答
  • Marko Smith

    通用还是非通用

    • 2 个回答
  • Marko Smith

    如何访问 jQuery 中的列

    • 1 个回答
  • Marko Smith

    *.tga 文件的组重命名(3620 个)

    • 1 个回答
  • Marko Smith

    内存分配列表C#

    • 1 个回答
  • Marko Smith

    常规赛适度贪婪

    • 1 个回答
  • Marko Smith

    如何制作自己的自动完成/自动更正?

    • 1 个回答
  • Marko Smith

    选择斐波那契数列

    • 2 个回答
  • Marko Smith

    所有 API 版本中的通用权限代码

    • 2 个回答
  • Martin Hope
    jfs *(星号)和 ** 双星号在 Python 中是什么意思? 2020-11-23 05:07:40 +0000 UTC
  • Martin Hope
    hwak 哪个孩子调用了父母的静态方法?还是不可能完成的任务? 2020-11-18 16:30:55 +0000 UTC
  • Martin Hope
    Qwertiy 并变成3个无穷大 2020-11-06 07:15:57 +0000 UTC
  • Martin Hope
    koks_rs 什么是样板代码? 2020-10-27 15:43:19 +0000 UTC
  • Martin Hope
    user207618 Codegolf——组合选择算法的实现 2020-10-23 18:46:29 +0000 UTC
  • Martin Hope
    Sirop4ik 向 git 提交发布的正确方法是什么? 2020-10-05 00:02:00 +0000 UTC
  • Martin Hope
    Arch ArrayList 与 LinkedList 的区别? 2020-09-20 02:42:49 +0000 UTC
  • Martin Hope
    iluxa1810 哪个更正确使用:if () 或 try-catch? 2020-08-23 18:56:13 +0000 UTC
  • Martin Hope
    faoxis 为什么在这么多示例中函数都称为 foo? 2020-08-15 04:42:49 +0000 UTC
  • Martin Hope
    Pavel Mayorov 如何从事件或回调函数中返回值?或者至少等他们完成。 2020-08-11 16:49:28 +0000 UTC

热门标签

javascript python java php c# c++ html android jquery mysql

Explore

  • 主页
  • 问题
    • 热门问题
    • 最新问题
  • 标签
  • 帮助

Footer

RError.com

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

帮助

© 2023 RError.com All Rights Reserve   沪ICP备12040472号-5