Portál AbcLinuxu, 8. května 2025 22:35

Dotaz: zamena hodnoty v tagu jinou hodnotou z jineho tagu.

29.9.2009 13:55 anon123 | skóre: 35 | blog: ganomi
zamena hodnoty v tagu jinou hodnotou z jineho tagu.
Přečteno: 447×
Odpovědět | Admin

Ahoj.

Hledam nejjednodussi zpusob zameny hodnoty tagu "name" za hodnotu v tagu "speed".

Mam GPS data v KML formatu, ale Google Earth zobrazuje automaticky jenom jmeno tagu. Chtel bych tam mit radsi rychlost.

Myslite, ze musim napsat scriptik, kterej vezme vsechny ty hodnoty  v tagu "Placemark", premeni to a pak je zapise do noveho souboru? Nebo se to da udelat jednoduseji?

Tady je jeden placemark. Samozrejme jich je tisice v jednom souboru.

<Placemark>
            <name>-617</name>
            <Snippet/>
            <description><![CDATA[
              <table>
                <tr><td>Longitude: 151.077010 </td></tr>
                <tr><td>Latitude: -33.733747 </td></tr>
                <tr><td>Altitude: 184.100 meters </td></tr>
                <tr><td>Speed: 70.8 km/hour </td></tr>
                <tr><td>Heading: 15.9 </td></tr>
                <tr><td>Time: 2009-09-26T23:42:51Z </td></tr>
              </table>
            ]]></description>
            <LookAt>
              <longitude>151.077010</longitude>
              <latitude>-33.733747</latitude>
              <tilt>66</tilt>
            </LookAt>
            <TimeStamp><when>2009-09-26T23:42:51Z</when></TimeStamp>
            <styleUrl>#track</styleUrl>
            <Point>
              <coordinates>151.077010,-33.733747,184.100000</coordinates>
            </Point>
          </Placemark>

Nástroje: Začni sledovat (1) ?Zašle upozornění na váš email při vložení nového komentáře.

Odpovědi

29.9.2009 14:20 Ash | skóre: 53
Rozbalit Rozbalit vše Re: zamena hodnoty v tagu jinou hodnotou z jineho tagu.
Odpovědět | | Sbalit | Link | Blokovat | Admin
Určitě musíte napsat nějký skriptík. Nejvhodnější by byla asi nějaká XSLT transformace, ale potřebujete někoho, kdo je ovládá, abyste s tím netrávil tejden. Další možnost je to zbastlit pomocí nějaké knihovny pro xml třeba v pythonu, takhle velkých souborů by se víc hodil SAX, ale to zase potřebujete někoho kdo ví která bije, a nebo nakonec DOM, např. simplexml, kde to spolu s googlem zvládne i poloprogramátor.
29.9.2009 14:27 petr_p | skóre: 59 | blog: pb
Rozbalit Rozbalit vše Re: zamena hodnoty v tagu jinou hodnotou z jineho tagu.
Odpovědět | | Sbalit | Link | Blokovat | Admin
Škoda že neexistuje žádný sed pro XML. Já bych to řešil pomocí XSLT, nicméně pokud ten váš soubor má pevnou strukturu, asi by se dal i se sedem udělat nějaký kotrmelec, jak tam ty hodnoty přepsat.
29.9.2009 14:30 petr_p | skóre: 59 | blog: pb
Rozbalit Rozbalit vše Re: zamena hodnoty v tagu jinou hodnotou z jineho tagu.
Koukám že rychlost máte schovanou v CDATA. No, to asi se standardním XSLT bez rozšiřujících funkcí nepůjde.
29.9.2009 14:48 anon123 | skóre: 35 | blog: ganomi
Rozbalit Rozbalit vše Re: zamena hodnoty v tagu jinou hodnotou z jineho tagu.

Ma to pevnou strukturu. Asi to v bash nactu radek po radku jako promenou a sedem to nejak vystrihnu. XSLT neznam...

Myslim, ze se to bude hodit spouste lidem, kteri logujou GPS data ( treba v aute) a pak si to chteji prohlednout na Google Earth.

3.10.2009 18:12 anon123 | skóre: 35 | blog: ganomi
Rozbalit Rozbalit vše Re: zamena hodnoty v tagu jinou hodnotou z jineho tagu.
Odpovědět | | Sbalit | Link | Blokovat | Admin

Tak scriptik mam skoro hotovy. Nacitam radky do array. Ted bych potreboval pomoc. Jak vyndat rychlost a vlozit ji do tagu "name"? Myslim, ze asi pouzitim "sed", ze?
Potrebuji jen tu rychlost "70.8 km/hour".

speed=$(echo -e "    Speed: 70.8 km/hour " | sed ...)

A pak nejak nahradit to cislo v tagu "name". To asi take s pomoci "sed", ze? Samozrejme zverejnim scriptik, az bude hotov i s postupem, jak loguju GPS data, kdyz jedu na motorce, a pak je zobrazuji v Google Earth. Diky za pomoc.

3.10.2009 18:59 anon123 | skóre: 35 | blog: ganomi
Rozbalit Rozbalit vše Re: zamena hodnoty v tagu jinou hodnotou z jineho tagu.

Tak jsem tak nejak sbastlil tu rychlost:

echo -e "    Speed: 70.8 km/hour " | sed -e 's/<[^>]*>//g' speedline.txt | sed -e 's/Speed://g'
3.10.2009 19:31 anon123 | skóre: 35 | blog: ganomi
Rozbalit Rozbalit vše Re: zamena hodnoty v tagu jinou hodnotou z jineho tagu.

Tak jsem to tak nejak udelal:

LINEARRAY[8] je radek s rychlosti
LINEARRAY[1] je radek s tagem "name"



changeName(){

SPEED=$(echo ${LINEARRAY[8]} | sed -e 's/<[^>]*>//g' speedline.txt | sed -e 's/Speed://g')

LINEARRAY[1]=$(echo ${LINEARRAY[1]} | sed -e 's/-[0-9]/SPEED/')

Problem je, ze nemuzu nahradit SPEED za variable SPEED. Kdyz tam dam '$SPEED' tak mi to hazi mi to error.

4.10.2009 11:11 anon123 | skóre: 35 | blog: ganomi
Rozbalit Rozbalit vše Re: zamena hodnoty v tagu jinou hodnotou z jineho tagu.

Tak jsem to uplacal:

changeName(){

SPEED="$(echo ${LINEARRAY[8]} | sed -e 's/<[^>]*>//g' | sed -e 's/.*Speed://g')"

TEMP1=$(echo -e "${LINEARRAY[1]}" | sed -e 's/-[0-9]*<\/name>//')
TEMP2=$(echo -e "${LINEARRAY[1]}" | sed -e 's/.*<name>-[0-9]*//')

TEMP=$TEMP1$SPEED$TEMP2
LINEARRAY[1]=$TEMP
}

Založit nové vláknoNahoru

Tiskni Sdílej: Linkuj Jaggni to Vybrali.sme.sk Google Del.icio.us Facebook

ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.