Drukowana wersja tematu

Kliknij tu, aby zobaczyć temat w orginalnym formacie

Forum PHP.pl _ Przedszkole _ [PHP][XML]Pobranie danych z tagu xml

Napisany przez: speszi 13.07.2019, 14:32:18

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.

Napisany przez: trueblue 13.07.2019, 18:05:39

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

->getAttribute('quantity');


http://forum.php.pl/index.php?s=&showtopic=264378&view=findpost&p=1243305

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

Napisany przez: speszi 13.07.2019, 18:50:53

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"

Napisany przez: trueblue 13.07.2019, 19:13:10

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

Napisany przez: speszi 31.07.2019, 17:26:00

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

Napisany przez: trueblue 31.07.2019, 17:38:09

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

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

Napisany przez: speszi 31.07.2019, 20:58:59

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.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)