Korzystam z SimpleXML, aby pobrać kanał XML. Muszę pobrać drugi węzeł o tej samej nazwie.
Przykładem kanału jest:
<parent-node>
<child-node>
<the-node>
<the-target>Text</target>
</the-node>
<the-node>
<the-target>Text</target>
</the-node>
</child-node>
</parent-node>
Ponieważ węzły, na które celuję, używają łączników, muszę użyć składni nawiasów
$item->{"parent-node"}->{"child-node"}->{"the-node"}
To złapie pierwszy <the-node>
Podczas korzystania ze składni nawiasów nie mogę wybrać drugiej <the-node>
"s <the-target>
używając dowolnego z poniższych ...
$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"}
Moje pytanie brzmi: jak celować childIndex podczas korzystania ze składni nawiasu, aby pobrać drugą <the-node>
"s <target>
?
--- AKTUALIZACJE ---
Po kilku odpowiedziach spróbowałem następujących bez powodzenia
$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]
Odpowiedzi:
0 dla odpowiedzi № 1SimpleXMLElement przechowuje węzły rodzeństwa tak, jakby były tablicą. Zazwyczaj oznacza to, że wartości są przechowywane z indeksem 0, tj. pierwsza wartość w tablicy zaczyna się od indeksu 0
.
Tak więc w tym przypadku drugi węzeł rodzeństwa jest dostępny tylko przy użyciu indeksu 1
zamiast 2
.
Do węzła poziomu głównego nie trzeba też przechodzić domyślnie (chyba że pominąłeś inny kod XML lub używasz ustawień innych niż domyślne).
Spróbuj tego:
// Will grab the 2nd <the-node/>
$node = $item->{"child-node"}->{"the-node"}[1];
W zależności od tego, czy początkowy kod działał bez dostępu do tablicy, możesz spróbować również:
// 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 dla odpowiedzi nr 2
Prawidłowa składnia wygląda następująco:
$item->{"child-node"}->{"the-node"}[0]; // First the-node
$item->{"child-node"}->{"the-node"}[1]; // Second the-node
Gdyby parent-node
jest elementem głównym wszystkich innych, nie można uzyskać do niego bezpośredniego dostępu.
$item->{"parent-node"}->{"child-node"}->{"the-node"}[0];
Powyższy kod spowoduje błąd „Próbuję uzyskać właściwość niebędącą przedmiotem”.
Od parent-node
jest najwyższym elementem głównym, nie można uzyskać do niego bezpośredniego dostępu.
Tylko bezpośredni element potomny górnego elementu głównego będzie dostępny do dostępu w obiekcie SimpleXMLElement.