Script PHP para ecoar o VLC que está jogando atributos XML

Estive procurando por um tempo sobre isso e não tive muita sorte. Eu encontrei muitos resources que mostram como ecoar dados de XML dynamic, mas eu sou um novato PHP, e nada que eu escrevi parece agarrar e imprimir exatamente o que eu quero, embora de tudo o que eu ouvi, deve seja relativamente fácil. O XML de origem (localizado em 192.168.0.15:8080/requests/status.xml) é o seguinte:

 0 97 false 2.0.5 Twoflower true 0 3  0 1 1 1 1  playing true 37 0.22050105035305 1 168 0     000003EC 00000253 00000D98 000007C0 00009C57 00004E37 000068EB 00003DC5 00015F90 00011187  2003  file://brentonshp04/music%24/Music/Hackett%2C%20Steve/Guitar%20Noir%20%26%20There%20Are%20Many%20Sides%20to%20the%20Night%20Disc%202/Folder.jpg  Steve Hackett Recall Guitar Noir & There Are Many Sides to the Night Disc 2  5 Beja Flor [Live] Rock Beja Flor [Live]   128 kb/s Audio Stereo 44100 Hz MPEG Audio layer 1/2/3 (mpga)    0 568 0 580544 0.015997290611267 0 0 0 0 0 0 0 0.016695899888873 0 0 0 0 581844 0   

O que estou tentando escrever é um script PHP simples que faz eco do nome do artista (neste exemplo, Steve Hackett). Na verdade, gostaria que fizesse eco do artista, da música e do álbum, mas estou confiante de que, se eu sou mostrado como recuperar um, posso descobrir o resto sozinho.

O pouco do meu script que realmente parece funcionar é o seguinte. Eu tentei mais do que o que está abaixo, mas deixei de lado os pedaços que eu sei, de fato, não estão funcionando.

 ... echo "Artist: "... ?> 

Eu acho que preciso usar foreach e echo , mas não consigo descobrir como fazê-lo de uma maneira que imprima o que é entre esses brackets de informações.

Me desculpe se eu deixei algo fora. Eu não sou apenas novo no PHP, mas também sou novo no StackOverflow. Eu referenciei este site em outros projetos, e sempre foi incrivelmente útil, então agradeço antecipadamente por sua paciência e ajuda!

//////// Escrita de Trabalho Terminada – Obrigado a Stefano e a todos os que ajudaram!

 xpath('//info[@name="artist"]'); $album_xpath = $sxe->xpath('//info[@name="album"]'); $title_xpath = $sxe->xpath('//info[@name="title"]'); $artist = (string) $artist_xpath[0]; $album = (string) $album_xpath[0]; $title = (string) $title_xpath[0]; echo "Artist: ".$artist."
"; echo "Title: ".$title."
"; echo "Album: ".$album."
"; ?>

Em vez de usar um loop for , você pode obter o mesmo resultado com o XPath :

 // Extraction splitted across two lines for clarity $artist_xpath = $sxe->xpath('//info[@name="artist"]'); $artist = (string) $artist_xpath[0]; echo $artist; 

Você terá que ajustar a expressão xpath (ou seja, mudar @name=... apropriadamente), mas você consegue a ideia. Observe também que [0] é necessário porque o xpath retornará uma matriz de correspondências (e você só precisa da primeira) e o casting (string) é usado para extrair texto contido no nó.

Além disso, seu XML é inválido e será rejeitado pelo analisador por causa do literal & aparecendo na tag .

Se você olhar para o seu código novamente, você está faltando uma function que transforma o primeiro resultado da expressão xpath em uma seqüência de um SimpleXMLElement (fundição).

Uma maneira de escrever isso uma vez é estender de SimpleXMLElement :

 class BetterXMLElement extends SimpleXMLElement { public function xpathString($expression) { list($result) = $this->xpath($expression); return (string) $result; } } 

Você então criou o SimpleXMLElement mais específico, como você usou o menos específico antes:

 $file = file_get_contents('http://192.168.0.15:8080/requests/status.xml'); $sxe = new BetterXMLElement($file); 

E então você se beneficia com o seu código a seguir:

 $artist = $sxe->xpathString('//info[@name="artist"]'); $album = $sxe->xpathString('//info[@name="album"]'); $title = $sxe->xpathString('//info[@name="title"]'); echo "Artist: ".$artist.""; echo "Title: ".$title.""; echo "Album: ".$album.""; 

Isso poupa algum código repetido. Isto significa, além disso, menos lugares em que você pode fazer um erro 🙂

Com certeza você pode continuar a otimizar isso, permitindo passar uma série de múltiplas consultas xpath e retornando todos os valores chamados então. Mas isso é algo que você precisa para escrever o seu próprio de acordo com suas necessidades específicas. Então use o que você aprende na programação para tornar a programação mais fácil 🙂

Se você quiser mais sugestões, aqui está outro exemplo muito detalhado usando o DOMDocument , a biblioteca irmã do SimpleXML . É bastante avançado, mas pode dar-lhe uma boa inspiração, acho que algo semelhante é possível com o SimpleXML e isso provavelmente é o que você está procurando no final:

  • Extraindo dados de HTML usando PHP e xPath