Portál AbcLinuxu, 8. května 2025 18:09

Dotaz: Promena v xml

7.7.2014 14:08 Jiri463
Promena v xml
Přečteno: 354×
Odpovědět | Admin
Potreboval bych udelat neco nasledujiciho v xml souboru.

#definice promene $var a prirazeni ji hodnotu napr. 1

<rodic>
<dite>0 $var 0</dite>
</rodic>

Diky

Řešení dotazu:


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

Odpovědi

7.7.2014 14:19 rastos | skóre: 63 | blog: rastos
Rozbalit Rozbalit vše Re: Promena v xml
Odpovědět | | Sbalit | Link | Blokovat | Admin
Očakávaš, že parser, ktorý bude to .xml čítať ti vráti, že text v elmente <dite> je "0 1 0"?

To asi nepôjde. XML je extensible markup language. Použiť by sa ale možno dalo XQuery.
7.7.2014 15:27 Kit | skóre: 45 | Brno
Rozbalit Rozbalit vše Re: Promena v xml
Odpovědět | | Sbalit | Link | Blokovat | Admin
Dá se to udělat např. v PHP
<?php
$var = 1;
$xml = <<<XML
<rodic>
<dite>0 $var 0</dite>
</rodic>
XML;
echo $xml;
nebo v Bashi
#!/bin/bash
var=1
cat <<XML
<rodic>
<dite>0 $var 0</dite>
</rodic>
XML
případně i v dalších jazycích.
Komentáře označují místa, kde programátor udělal chybu nebo něco nedodělal.
7.7.2014 16:30 Kit | skóre: 45 | Brno
Rozbalit Rozbalit vše Re: Promena v xml
Odpovědět | | Sbalit | Link | Blokovat | Admin
Vlastně to jde udělat docela snadno přímo v XML:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE rodic [
<!ENTITY var "1">
]>
<rodic>
<dite>
0 &var; 0
</dite>
</rodic>
Komentáře označují místa, kde programátor udělal chybu nebo něco nedodělal.
Josef Kufner avatar 7.7.2014 19:16 Josef Kufner | skóre: 70
Rozbalit Rozbalit vše Re: Promena v xml
… ale moc bych na to nespoléhal. Hodně záleží na parseru, zda to veme a zpracuje, nebo vrátí jen tu entitu. Spolehlivějším řešením je použít nějaký preprocesor.
Hello world ! Segmentation fault (core dumped)
7.7.2014 19:57 Kit | skóre: 45 | Brno
Rozbalit Rozbalit vše Re: Promena v xml
Pokud to následně bude zpracovávat nějakým XSLT procesorem, tak bych se toho nebál.

Napsal jsem mu tři možná řešení, snad si vybere. V záloze mám další dvě (přes sed a xsltproc). Jak je vidět, XML je hodně univerzální formát se kterým se dá dělat spousta věcí. Podle aplikace se jedno z těch pěti řešení určitě uplatní.
Komentáře označují místa, kde programátor udělal chybu nebo něco nedodělal.
Josef Kufner avatar 7.7.2014 20:48 Josef Kufner | skóre: 70
Rozbalit Rozbalit vše Re: Promena v xml
No … univerzální formát … oproti prostému textu má v tomto případě navíc jen ty entity.
Hello world ! Segmentation fault (core dumped)
7.7.2014 21:01 OldFrog {Ondra Nemecek} | skóre: 36 | blog: Žabákův notes | Praha
Rozbalit Rozbalit vše Re: Promena v xml
To zní skoro jako trolling...
-- OldFrog
7.7.2014 21:17 Kit | skóre: 45 | Brno
Rozbalit Rozbalit vše Re: Promena v xml
Ještě prosím napiš něco k tématu...
Komentáře označují místa, kde programátor udělal chybu nebo něco nedodělal.
8.7.2014 12:29 OldFrog {Ondra Nemecek} | skóre: 36 | blog: Žabákův notes | Praha
Rozbalit Rozbalit vše Re: Promena v xml
Možná jsem ten příspěvek blbě pochopil, nicméně xml je univerzální formát a oproti textu toho má mnohem víc než entity. Ale s tématem to souvisí opravdu jen volně, to je fakt.
-- OldFrog
8.7.2014 13:09 Kit | skóre: 45 | Brno
Rozbalit Rozbalit vše Re: Promena v xml
Šlo o slova "v tomto případě". Původní dotaz byl zřejmě hodně zjednodušen a celý případ užití neznáme. Proto se nedá jednoznačně určit, které z těch řešení je nejvhodnější.

Dokonce ani nevíme, jestli je vůbec nutné nějaké XML generovat, protože velmi často se bez tohoto mezičlánku obejdu a vystačím si s DOMem.
Komentáře označují místa, kde programátor udělal chybu nebo něco nedodělal.
8.7.2014 23:12 OldFrog {Ondra Nemecek} | skóre: 36 | blog: Žabákův notes | Praha
Rozbalit Rozbalit vše Re: Promena v xml
Ok :-)
-- OldFrog
7.7.2014 21:07 Kit | skóre: 45 | Brno
Rozbalit Rozbalit vše Re: Promena v xml
Jasně, mám ale na mysli, že se ke zpracování dají použít různé nástroje. Třeba v PHP jsem si teď udělal blbinku, která to také vygeneruje:
<?php
$var = 1;
$doc = new XMLwriter();
$doc->openMemory();
$doc->setIndent(true);
$doc->startElement('rodic');
$doc->writeElement('dite', "0 $var 0");
$doc->endDocument();
echo $doc->flush();
Je jedno, jestli bude v cyklu tahat data z textu, CSV nebo z DB. Prostě to jede, postará se to o escapování a je to i docela rychlé.
Komentáře označují místa, kde programátor udělal chybu nebo něco nedodělal.

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.