Linux-parsowanie xml

Odpowiedz Nowy wątek
2018-12-11 09:57
0

Cześć,
Potrzebuję z takiego fragmentu xml:

<pogo:lista>
    <pogo:Entry>
      <pogo:Active:>false</pogo:Active>
      <pogo:Value:>3</pogo:Value>
    </pogo:Entry>
    <pogo:Entry>
      <pogo:Active:>true</pogo:Active>
      <pogo:Value:>4</pogo:Value>
    </pogo:Entry>
</pogo:lista>

Za pomocą Shella w linux zsumować dane z taga Value gdzie active jest na true, Czyli w przypadku jak powyżej wynik powinien być równy 4 (jeden tag aktywny). Na ktoś pomysł jak to zrobić bez dodatkowych narzędzi w Linux??
Z góry bardzo dziękuję za pomoc

edytowany 1x, ostatnio: hauleth, 2018-12-11 12:10
Pokaż pozostałe 6 komentarzy
W jakiej dystrybucji? - Patryk27 2018-12-11 10:10
Byłoby miło, gdybym nie musiał Cię cały czas ciągnąć za język - teraz musiałbym zapytać który red hat?, potem pewnie która wersja? i tak jeszcze kilka razy. Tak czy siak - da się to rozwiązać za pomocą wget / curl: możesz stworzyć skrypt na własnym serwerze, który będzie przyjmował XML i zwracał odpowiednie pogo:value, po czym możesz wywołać ten skrypt za pomocą wget - voilà. Na około, lecz w całości zgodnie z regułami. - Patryk27 2018-12-11 10:15
no właśnie takie coś potrzebuję ale nie wiem jak się za to zabrać.. - student21 2018-12-11 10:19
@vpiotr podesłał Ci już jak podejść do problemu z wykorzystaniem Pythona - możesz to połączyć z SimpleHTTPServer i będzie śmigać. Ewentualnie możesz wykorzystać PHPa z rozszerzeniem simplexml, Go oraz wiele, wiele innych języków. Przeewaluuj opcje, wybierz któreś, zacznij pisać i daj znać, jeśli zatniesz się na jakimś konkretnym problemie. - Patryk27 2018-12-11 10:21

Pozostało 580 znaków

2018-12-11 09:59
0

https://docs.python-guide.org/scenarios/xml/


Szacuje się, że w Polsce brakuje 50 tys. programistów

Pozostało 580 znaków

2018-12-11 10:04
0

potrzebuję to wykonać bez xpath bo jakoś dziwnie ten xml jest sformatowany

Pozostało 580 znaków

2018-12-11 10:21
0

Co jest w tym XMLu takiego dziwnego?

<pogo:lista>
    <pogo:entry>
        <pogo:active:>false
        </pogo:active>
        <pogo:value:>3
        </pogo:value>
    </pogo:entry>
    <pogo:entry>
        <pogo:active:>true
        </pogo:active>
        <pogo:value:>4
        </pogo:value>
    </pogo:entry>
</pogo:lista>

Szacuje się, że w Polsce brakuje 50 tys. programistów

Pozostało 580 znaków

2018-12-11 10:23
0

jak parsuje tego xml to mam info, że nie ma xpath

Pozostało 580 znaków

2018-12-11 10:30
1

Ten XML jest niepoprawny.
Otwierasz tag: <pogo:value:>
i zamykasz </pogo:value>

Pozostało 580 znaków

2018-12-11 14:40
0

to literówka, powinno być

<pogo:lista>
    <pogo:Entry>
      <pogo:Active>false</pogo:Active>
      <pogo:Value>3</pogo:Value>
    </pogo:Entry>
    <pogo:Entry>
      <pogo:Active>true</pogo:Active>
      <pogo:Value>4</pogo:Value>
    </pogo:Entry>
</pogo:lista>
edytowany 1x, ostatnio: hauleth, 2018-12-11 15:53
Używaj tagów do kolorowania kodu. - hauleth 2018-12-11 15:53

Pozostało 580 znaków

2018-12-11 19:07
2

W bashu się da, ale jest to droga na około...

#!/bin/bash
echo "<pogo:lista>\
    <pogo:Entry>\
      <pogo:Active>false</pogo:Active>\
      <pogo:Value>3</pogo:Value>\
    </pogo:Entry>\
    <pogo:Entry>\
      <pogo:Active>true</pogo:Active>\
      <pogo:Value>4</pogo:Value>\
    </pogo:Entry>\
   <pogo:Entry>\
      <pogo:Active>true</pogo:Active>\
      <pogo:Value>4</pogo:Value>\
    </pogo:Entry>\
</pogo:lista>" | tr -d " \n" | sed -e "s/<\/pogo:Active><pogo:Value>/#/g" | tr "><" "\n\n" | egrep -i "true" | sed -e "s/true#//g" | awk 'BEGIN{s=0} {s+=$1} END {print s}'

Możesz stopniowo dodawać kolejne polecenia po | i patrzeć jakie są kroki przetwarzania.

Pozostało 580 znaków

2018-12-11 22:27
0

ok, właśnie o coś takiego mi chodziło, przetestuję to sobie. dziękuję

Pozostało 580 znaków

2018-12-12 14:30
0

a kojarzy ktoś dlaczego mogę otrzymywać taki komunikat "argument list too long" przy długim xml?

Pozostało 580 znaków

2018-12-12 14:43
1
student21 napisał(a):

a kojarzy ktoś dlaczego mogę otrzymywać taki komunikat "argument list too long" przy długim xml?

Kojarzy. :)

Podany skrypt (właściwie linijka) rozpakowuje Ci Twój XML do poszczególnych słów, a może być ich dużo. Z drugiej strony, linia poleceń w shellu ma ograniczoną liczbę możliwych argumentów i stąd ten komunikat.

Ale, szczerze mówiąc, przyjrzałem się podanemu przepisowi i nie wiem, gdzie tam może być za dużo argumentów... Może chodzi o samo echo? Prześledź (jak pisał @yarel) krok po kroku, wpisując do każdej | wyłącznie i patrz co się dzieje...

Pozostało 580 znaków

Odpowiedz
Liczba odpowiedzi na stronę

1 użytkowników online, w tym zalogowanych: 0, gości: 1, botów: 0