Eu estou usando o SimpleXML para puxar um feed XML. Eu preciso pegar o segundo nó com o mesmo nome.
O exemplo de feed é:
<parent-node>
<child-node>
<the-node>
<the-target>Text</target>
</the-node>
<the-node>
<the-target>Text</target>
</the-node>
</child-node>
</parent-node>
Como os nós que eu estou segmentando usam hifens, preciso usar a sintaxe de colchetes
$item->{"parent-node"}->{"child-node"}->{"the-node"}
Isso vai pegar o primeiro <the-node>
Ao usar a sintaxe de colchetes, não consigo selecionar o segundo <the-node>
"s <the-target>
usando qualquer um dos seguintes ...
$item->{"parent-node"}->{"child-node"}->{"the-node[2]"}->{"the-target"}
$item->{"parent-node"}->{"child-node"}->{"the-node"[2]}->{"the-target"}
$item->{"parent-node"}->{"child-node"}->{"the-node"}[2]->{"the-target"}
Minha pergunta é: como segmentar childIndex ao usar a sintaxe de colchetes para capturar o segundo <the-node>
"s <target>
?
--- ATUALIZAÇÕES ---
Depois de algumas das respostas, eu tentei o seguinte sem sorte
$item->{"parent-node"}->{"child-node"}->{"the-node"}[1]->{"the-target"}
$item->{"parent-node"}->{"child-node"}->{"the-node"}->{"the-target"}[1]
$item->{"child-node"}->{"the-node"}->{"the-target"}[1]
Respostas:
0 para resposta № 1SimpleXMLElement armazena nós irmãos como se fossem um array. Isso geralmente indica que os valores são armazenados com um índice baseado em 0, ou seja. o primeiro valor na matriz começa no índice 0
.
Portanto, neste caso, o segundo nó irmão só é acessível usando o índice 1
ao invés de 2
.
Além disso, o nó de nível raiz não precisa ser percorrido por padrão (a menos que você tenha omitido algum outro XML ou esteja usando algumas configurações não padrão).
Tente isto:
// Will grab the 2nd <the-node/>
$node = $item->{"child-node"}->{"the-node"}[1];
Dependendo se o seu código inicial funcionou sem o acesso à matriz, você pode tentar também:
// Testing locally I was not able to use this and got an error
// But maybe things are omitted in your question.
$node = $item->{"parent-node"}->{"child-node"}->{"the-node"}[1];
0 para resposta № 2
A sintaxe correta é semelhante à seguinte:
$item->{"child-node"}->{"the-node"}[0]; // First the-node
$item->{"child-node"}->{"the-node"}[1]; // Second the-node
E se parent-node
é o elemento raiz de todos os outros, você não pode acessá-lo explicitamente.
$item->{"parent-node"}->{"child-node"}->{"the-node"}[0];
O código acima resultará em erro dizendo "Tentando obter propriedade de não objeto".
Desde a parent-node
é o elemento raiz superior, você não pode acessá-lo explicitamente.
Somente o elemento filho imediato do elemento raiz superior estará disponível para acesso no objeto SimpleXMLElement.