0

パス名のリストを取得するために smil (xml) ファイルを解析しています。解析はうまくいき、巨大なリテラル オブジェクトに保存されます。

しかし、情報を取り戻そうとすると、次の情報しか得られません。

/home/pi/RaspberryPiTV-master/app.js:158
        Playlist.push(smil.playlist.video[i].src);
                                         ^
TypeError: Cannot read property 'undefined' of undefined
at /home/pi/RaspberryPiTV-master/app.js:158:46
at /home/pi/RaspberryPiTV-master/app.js:321:39
at Object.oncomplete (fs.js:93:15)

コードは次のとおりです。

var smil={}, i=0;
Playlist=[];
parse("/home/pi/test.smil", function (parsed){
    smil=parsed;
    console.dir(util.inspect(smil, false, null));
    do
    {
        Playlist.push(smil.playlist.video[i].src);
        i=i+1;
    }while(i<smil.playlist.video.length-1);
    ...
}

関数 parse (パス名、コールバック) は非常に巨大ですが、出力が機能するため機能します。

{
  stream:
    [
      { name: 'Stream1' }
    ],
  playlist:
    [
      { video:
        [
          { src: 'L.mp4', start: '5', length: '5' },
          { src: 'SW.mp4', start: '50', length: '5' },
          { src: 'HN.mp4', start: '150', length: '5' }
        ],
        name: 'pl1',
        playOnStream: 'Stream1',
        repeat: 'true',
        scheduled: '2013-07-23 11:00:00'
      }
    ]
}

何か不足していますか?印刷が正しく行われるため、なぜ未定義になるのかわかりません。

4

3 に答える 3

2

playlist配列です。

交換

smil.playlist.video[i].src

var index = 0; // or whatever
smil.playlist[index].video[i].src
于 2013-07-26T15:52:02.970 に答える
2

あなたのJSONによるとplaylist、配列です:

playlist:
    [ <-- Array declaration
      { ... }
    ]

ただし、次のことを行っています。

smil.playlist.video[i].src
-------------^ 

のインデックスを参照する必要がありますplaylist

于 2013-07-26T15:52:26.467 に答える
1

video[i] が未定義であるため、未定義オブジェクトのメソッドは未定義になると言っています! smil.playlist を印刷してみてください。

于 2013-07-26T15:51:48.307 に答える