Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [PHP][XML]Pobranie danych z tagu xml
speszi
post 13.07.2019, 14:32:18
Post #1





Grupa: Zarejestrowani
Postów: 4
Pomógł: 0
Dołączył: 13.07.2019

Ostrzeżenie: (0%)
-----


Witam.
Mam taki kod w xml
<size>
<stock id="0" quantity="0.000"/>
<stock id="1" quantity="34" location_id="40" location_text_id="Magazyn główny\13L"/>
<stock id="2" quantity="2"/>
</size>
Mam problem z pobraniem danych quantity w przypadku jeżeli w tagu stock id="1".
Czyli chciałbym wyciągnąć wartość 34 z quantity.
Próbowałem w ten sposób /sizes/size/stock[@id="1"][quantity] ale nic z tego.
co należy wpisać po [@id="1"] aby pobrało wartość quantity.
Go to the top of the page
+Quote Post
trueblue
post 13.07.2019, 18:05:39
Post #2





Grupa: Zarejestrowani
Postów: 5 715
Pomógł: 1567
Dołączył: 11.03.2014

Ostrzeżenie: (0%)
-----


Kod
//sizes/size/stock[@id="1"]

->getAttribute('quantity');


http://forum.php.pl/index.php?s=&showt...t&p=1243305

https://kawalekkodu.pl/the-tag-is-out-there...domxpath-s01e01
https://kawalekkodu.pl/the-tag-is-out-there...domxpath-s01e02
https://kawalekkodu.pl/the-tag-is-out-there...domxpath-s01e03
https://kawalekkodu.pl/the-tag-is-out-there...domxpath-s01e04


--------------------
Go to the top of the page
+Quote Post
speszi
post 13.07.2019, 18:50:53
Post #3





Grupa: Zarejestrowani
Postów: 4
Pomógł: 0
Dołączył: 13.07.2019

Ostrzeżenie: (0%)
-----


A jest możliwość żeby to zadziałało w "xQuery tester" bo po dopisaniu tego polecenia nie wyświetla wyników a mój moduł przyjmuje to tylko w takiej wersji
W przypadku wywołania sizes/size/stock[@id="1"] otrzymuje:
<?xml version="1.0" encoding="UTF-8"?>
<stock xmlns:iaiext="http://www.iai-shop.com/developers/iof/extensions.phtml"
id="1"
quantity="34"
location_id="40"
location_text_id="Magazyn główny\13L"/>
A tu chodzi żebym otrzymał tylko wartość quantity dla rekordów z id="1"
Go to the top of the page
+Quote Post
trueblue
post 13.07.2019, 19:13:10
Post #4





Grupa: Zarejestrowani
Postów: 5 715
Pomógł: 1567
Dołączył: 11.03.2014

Ostrzeżenie: (0%)
-----


Kod
string(//size/stock[@id="1"]/@quantity)


--------------------
Go to the top of the page
+Quote Post
speszi
post 31.07.2019, 17:26:00
Post #5





Grupa: Zarejestrowani
Postów: 4
Pomógł: 0
Dołączył: 13.07.2019

Ostrzeżenie: (0%)
-----


Działa smile.gif
Dzięki za pomoc choć samo dzięki za podzielenie się wiedzą na tym forum to za mało i podziwiam takich ludzi którzy służą bezinteresownie innym.
A tak w ogóle to stosowałem ten zapis tyle że nie wpadłem na to że w xQuery muszę dodać na wstępie string smile.gif

Witam. Ponownie a może tak kontynuując o krok dalej mam pytanie czy jest opcja łączenia wartości.
Chciałbym z kodu:
<parameter>
<value priority="0" name="Panel"/>
<value priority="1" name="FM"/>
<value priority="2" name="USB"/>
</parameter>
Pobrać naraz wszystkie dane paramteru "name". Czyli żeby wynikiem było np coś takiego: "Panel. FM. USB."
Wpisująć w xQuery tester polecenie
string (//parameter/value[@priority="1"]/@name)
otrzymuje wynik: "Panel" Jednak jeżeli już próbuje połączyć wyniki w jeden ciąg poniższym poleceniem:
string (//parameter/value[@priority="1"]/@name) | (//parameter/value[@priority="2"]/@name)
nic nie wychodzi.
Jest jakiś sposób aby połączyć wszystkie wartości "name" najlepiej oddzielając je w wyniku spacją lub kropką.
Będę wdzięczny za pomoc bo już przesiedziałem drugi dzień nad tym rozwiązaniem i nic sad.gif

Ten post edytował speszi 31.07.2019, 17:34:22
Go to the top of the page
+Quote Post
trueblue
post 31.07.2019, 17:38:09
Post #6





Grupa: Zarejestrowani
Postów: 5 715
Pomógł: 1567
Dołączył: 11.03.2014

Ostrzeżenie: (0%)
-----


A dlaczego na siłę znów wciskasz tam nawiasy kwadratowe?

Do łączenia używa się concat, podałem Ci linki z przykładami.


--------------------
Go to the top of the page
+Quote Post
speszi
post 31.07.2019, 20:58:59
Post #7





Grupa: Zarejestrowani
Postów: 4
Pomógł: 0
Dołączył: 13.07.2019

Ostrzeżenie: (0%)
-----


Dzięki.
Szczerze mówiąc to przeglądałem te linki ale nie znalazłem nic o concat i wogóle ciężko cokolwiek znaleź w dokumantacjach na temat tej funkcji a przecież nie jest czymś wyjątkowym.
Zapis jaki przyniósł zamierzony efekt to:
string (//parameter/(concat (value[@priority="0"]/@name, value[@priority="1"]/@name, value[@priority="2"]/@name)))
Próbowałem jeszcze to uprościć aby nie powtarzać @priority dla każdego indeksu (gdyby się okazało że jest ich ok. 50) tylko żeby polecenie z automatu połączyło wszystkie wartości @name ze wszystkich tagów "value" ale bez efektów więc zadowole się takim rozwiązaniem.
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Wersja Lo-Fi Aktualny czas: 29.02.2020 - 10:56