Ir para conteúdo

POWERED BY:

Arquivado

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

ramiroramiro10

[Resolvido] Lendo XML

Recommended Posts

Pessoal preciso que o PHP "ache" num XML informações específicas mas não estou conseguindo...

 

.xml:

<?xml version="1.0" encoding="iso-8859-1"?>
<Relatorio>
<Pagina><Title>DVDS</Title>
<Item><Title>ARTISTA</Title><Value>Daniel</Value></Item>
<Item><Title>ESTILO</Title><Value>Sertanejo</Value></Item>
<Item><Title>Preço</Title><Value>19,99</Value></Item>
</Pagina>
<Pagina><Title>Livros</Title>
<Estilo><Title>Romance</Title>
<Item><Title>AUTOR</Title><Value>Jo Soares</Value></Item>
<Item><Title>Preço</Title><Value>69,99</Value></Item>
</Estilo>
<Estilo><Title>Exoterico</Title>
<Item><Title>AUTOR</Title><Value>Paulo Coelho</Value></Item>
<Item><Title>Preço</Title><Value>45,99</Value></Item>
</Estilo>
</Pagina>
</Relatorio>

 

Gostaria que ele achasse o Value "Jo Soares" não através dos nós[0,1,2,3] mas sim atraves de um filtro dos Titles, estou tentando assim:

 

<?php
$xml = simplexml_load_file("manipulandoxml.xml");

foreach($xml->Pagina as $pagina)
{
if ($pagina->Title == "Livros")
 {
	foreach ($pagina->Estilo as $estilo)
		{
			if ($estilo->Title == "Romance")
			{
				foreach ($estilo->Item as $item)
					{ 
						if ($item->Title == "Autor"){echo $item->Value; }
					}
			}
		}
	}
}
?>

 

Por Favor me ajudem!!!

Compartilhar este post


Link para o post
Compartilhar em outros sites

<?php
$XML = <<<XML
<?xml version="1.0" encoding="iso-8859-1"?>
<Relatorio>
<Pagina><Title>DVDS</Title>
<Item><Title>ARTISTA</Title><Value>Daniel</Value></Item>
<Item><Title>ESTILO</Title><Value>Sertanejo</Value></Item>
<Item><Title>Preço</Title><Value>19,99</Value></Item>
</Pagina>
<Pagina>
 <Title>Livros</Title>
  <Estilo><Title>Romance</Title>
  <Item>
    <Title>AUTOR</Title>
    <Value>Jo Soares</Value>
</Item>
<Item><Title>Preço</Title><Value>69,99</Value></Item>
</Estilo>
<Estilo><Title>Exoterico</Title>
<Item><Title>AUTOR</Title><Value>Paulo Coelho</Value></Item>
<Item><Title>Preço</Title><Value>45,99</Value></Item>
</Estilo>
</Pagina>
</Relatorio>
XML;

   $DOMDocument = new DOMDocument( '1.0' , 'utf-8' );
   $DOMDocument->preserveWhiteSpace = false;
   $DOMDocument->loadXML( $XML );
   $DOMXPath = new DOMXPath( $DOMDocument );
   foreach( $DOMXPath->query( ".//Pagina/Estilo[Title='Romance']/Item[Value='Jo Soares']/parent::node()" ) as $Nodes ){
            foreach( $Nodes->childNodes as $Node ){
                     echo $Node->nodeName, ':', utf8_decode( $Node->nodeValue ), '<br />';
            }
   }

 

Saída:

Title:Romance
Item:AUTORJo Soares
Item:Preço69,99

 

Isso ?

Compartilhar este post


Link para o post
Compartilhar em outros sites

A IDÉIA EU ENTENDI MAS NÃO FIUNCIONOU HAHAHA

ESTE

$DOMDocument->loadXML("manipulandoxml.xml"); 

CARREGA O XML IGUAL AO:

simplexml_load_file("manipulandoxml.xml"); 

???? pois o xml não está dentro do PHP mas sim em um arquivo externo! :ermm:

Compartilhar este post


Link para o post
Compartilhar em outros sites

Nossa Andrey Knupp você melhorou 100% meu dia :joia:

MUITISSIMO OBRIGADO! :joia:

 

Certo, agora vou fazer as minhas sugestões:

 

Primeiro: sua estrutura do XML está horrível, pra cada nóde você coloca um <title> ? .. qual á utilidade ..

Ele só vai te atrapalhar a achar esses caras no XML ..

Segundo: procure evitar colocar texto pequeno entre as nodes, isso já ajuda o selecionamento, faça igual um html:

<preco value="..." />

Assim você navega por atributos, que facilita bem mais ..

 

Se fosse eu, o xml seria assim:

<relatorio>
   <pagina nome="Livros">
       <item title="Romance" >
           <autor value="Jo Soares" />
           <preco value="1.00" />
           <descricao> Aqui sim teria um propósito melhor de colocar o texto entre as nodes </descricao>
       </item>
   </pagina>
</relatorio>

 

Creio que você queira melhorar seu output atual para:

Title:AUTOR
Value:Jo Soares
Title:Preço
Value:69,99

 

Ou em um array:

Array
(
   [0] => Array
       (
           [Title] => AUTOR
           [Value] => Jo Soares
       )

   [1] => Array
       (
           [Title] => Preço
           [Value] => 69,99
       )

)

 

<?php
   $DOMDocument = new DOMDocument( '1.0' , 'utf-8' );
   $DOMDocument->preserveWhiteSpace = false;
   $DOMDocument->loadXML( $XML );
   $DOMXPath = new DOMXPath( $DOMDocument );
   foreach( $DOMXPath->query( ".//Pagina/Estilo[Title='Romance']/Item[Value='Jo Soares']/parent::node()/Item/Value/parent::node()" ) as $Nodes ){
            foreach( $Nodes->childNodes as $Node ){
                     $Conteudo[ $Node->nodeName ] = utf8_decode( $Node->nodeValue ); 
            }
            $Dados[] = $Conteudo;
   }
   echo '<pre>';
   print_r( $Dados );

 

Veja a saída do array, e você entendera por que tá mal estruturado

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

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