Ir para conteúdo

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Luciano Zanita

TAG Externa XML PHP

Recommended Posts

Boa tarde a todos, estou tendo alguns problemas para poder selecionar um determinado texto isolado de um XML externo que estou puxando via "file_get_contents", vou postar o código primeiro para explicar.

 

SCRIPT PHP

<?php 
$xml_data=file_get_contents("http://ipdoservidor:8086/connectioncounts"); 
  $doc = new DOMDocument(); 
  $doc->loadXML($xml_data); 
  $wms = $doc->getElementsByTagName('WowzaMediaServer'); 
  $currentlistener = $wms->item(0)->getElementsByTagName("ConnectionsCurrent")->item(0)->nodeValue; 
  $listenerhits = $wms->item(0)->getElementsByTagName("ConnectionsTotal")->item(0)->nodeValue; 
  echo "Current listener: $currentlistener<br> Total hits: $listenerhits"; 
?>

ARQUIVO XML EXTERNO(FORMATO)

<WowzaMediaServer>
<ConnectionsCurrent>1</ConnectionsCurrent>
<ConnectionsTotal>3</ConnectionsTotal>
<ConnectionsTotalAccepted>1</ConnectionsTotalAccepted>
<ConnectionsTotalRejected>2</ConnectionsTotalRejected>
<MessagesInBytesRate>7088.0</MessagesInBytesRate>
<MessagesOutBytesRate>0.0</MessagesOutBytesRate>
<VHost>
<Name>_defaultVHost_</Name>
<TimeRunning>2664.886</TimeRunning>
<ConnectionsLimit>0</ConnectionsLimit>
<ConnectionsCurrent>1</ConnectionsCurrent>
<ConnectionsTotal>3</ConnectionsTotal>
<ConnectionsTotalAccepted>1</ConnectionsTotalAccepted>
<ConnectionsTotalRejected>2</ConnectionsTotalRejected>
<MessagesInBytesRate>7088.0</MessagesInBytesRate>
<MessagesOutBytesRate>0.0</MessagesOutBytesRate>
<Application>
<Name>primario</Name>
<Status>loaded</Status>
<TimeRunning>570.617</TimeRunning>
<ConnectionsCurrent>1</ConnectionsCurrent>
<ConnectionsTotal>3</ConnectionsTotal>
<ConnectionsTotalAccepted>1</ConnectionsTotalAccepted>
<ConnectionsTotalRejected>2</ConnectionsTotalRejected>
<MessagesInBytesRate>7081.0</MessagesInBytesRate>
<MessagesOutBytesRate>0.0</MessagesOutBytesRate>
<ApplicationInstance>
<Name>_definst_</Name>
<TimeRunning>570.59</TimeRunning>
<ConnectionsCurrent>1</ConnectionsCurrent>
<ConnectionsTotal>3</ConnectionsTotal>
<ConnectionsTotalAccepted>1</ConnectionsTotalAccepted>
<ConnectionsTotalRejected>2</ConnectionsTotalRejected>
<MessagesInBytesRate>7081.0</MessagesInBytesRate>
<MessagesOutBytesRate>0.0</MessagesOutBytesRate>
<Stream>
<Name>primario.sdp</Name>
<SessionsFlash>0</SessionsFlash>
<SessionsCupertino>0</SessionsCupertino>
<SessionsSanJose>0</SessionsSanJose>
<SessionsSmooth>0</SessionsSmooth>
<SessionsRTSP>0</SessionsRTSP>
<SessionsTotal>0</SessionsTotal>
</Stream>
<Stream>
<Name>secundario.sdp</Name>
<SessionsFlash>0</SessionsFlash>
<SessionsCupertino>0</SessionsCupertino>
<SessionsSanJose>0</SessionsSanJose>
<SessionsSmooth>0</SessionsSmooth>
<SessionsRTSP>0</SessionsRTSP>
<SessionsTotal>0</SessionsTotal>
</Stream>
</ApplicationInstance>
</Application>
</VHost>
</WowzaMediaServer>

O script php na linha 5, ele reconhece a TAG para poder pegar os dados, o detalhe é que preciso pegar <Name>primario.sdp</Name> para poder ler o SessionsTotal que é o que preciso, mais ai que esta o problema como fazer isso...
Alguém sabe me dizer como posso estar fazendo isto?
Agradeço desde já a ajuda.

Compartilhar este post


Link para o post
Compartilhar em outros sites
<?php 
$xml_data=file_get_contents("http://ipdoservidor:8086/connectioncounts"); 
  $doc = new DOMDocument(); 
  $doc->loadXML($xml_data); 
  $wms = $doc->getElementsByTagName('WowzaMediaServer'); 

// expressão regular com preg_match_all

preg_match_all("/<Name>primario.sdp</Name>(.+?)</SessionsTotal>/i", $wms , $trecho);

$trecho= str_replace('<Name>primario.sdp</Name>','',$trecho);
$trecho= str_replace('<SessionsFlash>0</SessionsFlash>','',$trecho);
$trecho= str_replace('<SessionsCupertino>0</SessionsCupertino>','',$trecho);
$trecho= str_replace('<SessionsSanJose>0</SessionsSanJose>','',$trecho);
$trecho= str_replace('<SessionsSmooth>0</SessionsSmooth>','',$trecho);
$trecho= str_replace('<SessionsRTSP>0</SessionsRTSP>','',$trecho);

echo $trecho; 

// depois daqui você ve o que faz com o trecho 

  $currentlistener = $wms->item(0)->getElementsByTagName("ConnectionsCurrent")->item(0)->nodeValue; 
  $listenerhits = $wms->item(0)->getElementsByTagName("ConnectionsTotal")->item(0)->nodeValue; 
  echo "Current listener: $currentlistener<br> Total hits: $listenerhits"; 
?>

a primeira expressão regular (no preg_match_all) deve pegar essa parte inteira:

<Name>primario.sdp</Name>
<SessionsFlash>0</SessionsFlash>
<SessionsCupertino>0</SessionsCupertino>
<SessionsSanJose>0</SessionsSanJose>
<SessionsSmooth>0</SessionsSmooth>
<SessionsRTSP>0</SessionsRTSP>
<SessionsTotal>0</SessionsTotal>

As demais partes com str_replace vao substituir os partes informadas por nada ' '.

 

ai dentro da variavel $trecho terá somente: <SessionsTotal>0</SessionsTotal>

Compartilhar este post


Link para o post
Compartilhar em outros sites
<?php 
$xml_data=file_get_contents("http://ipdoservidor:8086/connectioncounts"); 
  $doc = new DOMDocument(); 
  $doc->loadXML($xml_data); 
  $wms = $doc->getElementsByTagName('WowzaMediaServer'); 

// expressão regular com preg_match_all

preg_match_all("/<Name>primario.sdp</Name>(.+?)</SessionsTotal>/i", $wms , $trecho);

$trecho= str_replace('<Name>primario.sdp</Name>','',$trecho);
$trecho= str_replace('<SessionsFlash>0</SessionsFlash>','',$trecho);
$trecho= str_replace('<SessionsCupertino>0</SessionsCupertino>','',$trecho);
$trecho= str_replace('<SessionsSanJose>0</SessionsSanJose>','',$trecho);
$trecho= str_replace('<SessionsSmooth>0</SessionsSmooth>','',$trecho);
$trecho= str_replace('<SessionsRTSP>0</SessionsRTSP>','',$trecho);

echo $trecho; 

// depois daqui você ve o que faz com o trecho 

  $currentlistener = $wms->item(0)->getElementsByTagName("ConnectionsCurrent")->item(0)->nodeValue; 
  $listenerhits = $wms->item(0)->getElementsByTagName("ConnectionsTotal")->item(0)->nodeValue; 
  echo "Current listener: $currentlistener<br> Total hits: $listenerhits"; 
?>

a primeira expressão regular (no preg_match_all) deve pegar essa parte inteira:

<Name>primario.sdp</Name>
<SessionsFlash>0</SessionsFlash>
<SessionsCupertino>0</SessionsCupertino>
<SessionsSanJose>0</SessionsSanJose>
<SessionsSmooth>0</SessionsSmooth>
<SessionsRTSP>0</SessionsRTSP>
<SessionsTotal>0</SessionsTotal>

As demais partes com str_replace vao substituir os partes informadas por nada ' '.

 

ai dentro da variavel $trecho terá somente: <SessionsTotal>0</SessionsTotal>

 

Começou a dar uma luz rs

Então no caso quero pegar o <SessionsFlash>0</SessionsFlash> que esta dentro do texto inferno, o que teria que fazer?

 

Tentei rodar o código no cru só que retornou um erro.

 

Warning: preg_match_all() expects parameter 2 to be string, object given in teste.php on line 10

Compartilhar este post


Link para o post
Compartilhar em outros sites

  • Conteúdo Similar

    • Por ILR master
      Fala galera.
      Espero que todos estejam bem.
      Seguinte: Tenho um arquivo xml onde alguns campos estão com : (dois pontos), como o exemplo abaixo:
       
      <item>
      <title>
      d sa dsad sad sadasdas
      </title>
      <link>
      dsadas dsa sad asd as dsada
      </link>
      <pubDate>sadasdasdsa as</pubDate>
      <dc:creator>
      d sad sad sa ad as das
      </dc:creator>
      </item>
       
      Meu código:
       
      $link = "noticias.xml"; 
      $xml = simplexml_load_file($link); 
      foreach($xml -> channel as $ite) {     
           $titulo = $ite -> item->title;
           $urltitulo = $ite -> item->link;
           print $urltitulo = $ite -> item->dc:creator;
      } //fim do foreach
      ?>
       
      Esse campo dc:creator eu não consigo ler. Como faço?
       
      Agradeço quem puder me ajudar.
       
      Abs
       
       
    • Por Jack Oliveira
      Boa noite galera..
       
      Estou tentando gerar um sitemap com php
       
      So que tenho que por o limit 1200 
       
      mais que isso ele nao gera e se deixar sem limit 
       
      Obs: o banco de dados contem mais de 10 mil registros
      <?php // Data e hora atual $datetime = new DateTime(date('Y-m-d H:i:s')); // A linha abaixo me retornará uma data no seguinte formato: 2017-11-22T00:06:23-02:00 $date = $datetime->format(DateTime::ATOM); // ISO8601 // Gera o arquivo XML do sitemap $xml = '<?xml version="1.0" encoding="UTF-8"?> <urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.sitemaps.org/schemas/sitemap/0.9/sitemap.xsd"> <url> <loc>'.ConfigPainel('site_url').'</loc> <lastmod>'.$date.'</lastmod> <changefreq>weekly</changefreq> <priority>1.00</priority> </url>'; $Query = DBRead('cidades','*',"WHERE status ='1' ORDER BY nome ASC"); if (is_array($Query)) { foreach ($Query as $modcid) { $xml .=' <url> <loc>'.ConfigPainel('site_url').''.$modcid['subdominio'].'/</loc> <lastmod>'.$date.'</lastmod> <changefreq>weekly</changefreq> <priority>1.00</priority> </url>'; //$QueryR = DBRead('directory_guia', '*',"WHERE cidade='{$modcid['id']}' AND status='1' ORDER BY titulo ASC"); $QueryR = DBRead('directory_guia', '*',"WHERE cidade='{$modcid['id']}' AND status='1' ORDER BY titulo ASC LIMIT 1200"); if (is_array($QueryR)) { foreach ($QueryR as $v) { $Queryc = DBRead('cidades', '*',"WHERE id='{$v['cidade']}' ORDER BY nome ASC")[0]; if(empty($v['slug'])) { }else{ $urlseo = ''.ConfigPainel('site_url').''.$Queryc['subdominio'].'/list/'.$v['slug'].'/'; $xml .=' <!-- INICIO DA EMPRESA '.TRIM($v['titulo']).' --> <url> <loc>'.$urlseo.'</loc> <lastmod>'.$date.'</lastmod> <changefreq>weekly</changefreq> <priority>0.85</priority> </url> <!-- FIM DA EMPRESA '.TRIM($v['titulo']).' --> '; } }} }} $xml .= ' </urlset>'; // Abre o arquivo ou tenta cria-lo se ele não exixtir $arquivo = fopen('../sitemap.xml', 'w'); if (fwrite($arquivo, $xml)) { Redireciona('./index.php?sucesso'); } else { Redireciona('?erro'); } fclose($arquivo); // Compactar arquivo sitemap para GZIP $data = implode("", file("sitemap.xml")); $gzdata = gzencode($data, 9); $fp = fopen("sitemap.xml.gz", "w"); fwrite($fp, $gzdata); fclose($fp); // Envia para o Google o novo sitemap gerado $urlSitemap = "http://www.google.com/webmasters/sitemaps/ping?sitemap=".ConfigPainel('site_url').""; // Arquivos a serem enviados $Files = ['sitemap.xml', 'sitemap.xml.gz']; // Envia os dois arquivos sitemap gerados para a URL do Google foreach ($Files as $file) { $url = $urlSitemap . $file; $ch = curl_init($url); curl_setopt($ch, CURLOPT_HEADER, 0); curl_exec($ch); $httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE); curl_close($ch); } ?> Caso ouve outra forma que eu possa gerar este sitemap com php fico grato...
    • Por asacap1000
      Galera salve salve!!
      Estou com um projeto em que são armazenados vídeos, porém seguindo os requisitos exigidos, para visualizar e baixar esses vídeos eles tem que aparecer com numero de cadastro do usuário que está acessando no centro do video como uma marca d'agua.
       
      Para simplesmente aparecer na tela eu consigo fazer uma camada superior com css e apresentar os dados do usuário mas para baixar o vídeo ele já faz sem a marca.
       
      Vocês conhecem algum recurso pra adicionar essa marca? ela não pode ficar no arquivo original pois outros usuário poderão baixar com sua identificação na tela.
       
      Se alguem puder me dar um norte ajudaria muito
    • Por marcelo.ourico
      Estou precisando fazer o envio de um XML via webservice. Estou utilizando PHP 7.4 e nuSoap.

      Porém esse XML de envio possui várias tags com hífen. Por exemplo <tag-name></tag-name>.
       
      Esse hífen tem sido um problema, principalmente por que eu não posso enviar o XML como string. Apenas como objeto. Então imaginem isso:
       
      $objeto = simplexml_load_string($string_xml);  
      Se simplesmente eu tentar resgatar o valor da TAG já dá erro...
       
      $campo1= $objeto->tag-name;
      O erro ocorre em função de que o hífen é um caractere reservado do PHP... Então como resolver?

      Independente disso, quando eu tento fazer o envio via nuSoap, também recebo erro abaixo:
      wsdl->getTypeDef('tag-name', 'http://xyz.abr...')
      wsdl->serializeType('tag-name', 'tag-name', Object(SimpleXMLElement), '

      Alguém já passou por isso? Sabe como resolver? Pode dar uma dica?
    • Por sbtbua
      Boa noite, Estou precisando de um script em php para acessar o preço de uma cryptomoeda alguém tem algum que por favor não use classes Algo bem simples
×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.