Autor | Zpráva | ||
---|---|---|---|
roboti006 Profil * |
#1 · Zasláno: 5. 12. 2013, 12:29:30
Ahoj. Používáme k projekci textů program OpenLP. Už v něm mám slušnou zásobu písní, které jsem přepisoval, a teď mně zajímalo, zda se dá nějak jednoduše získat text z písní (<lyrics>). Podařilo se mi pomocí simpleXML vytáhnout z kódu Autory, název písní a pořadí slok (<properties>), nepodařilo se mi však zdárně dostat z něj text písní (což je docela podstatná část) - resp. snažil jsem se dostat do proměnné $textpisne pomocí foreach text podle názvu sloky, to mi však neprošlo, protože uvnitř sloky se vyskytují ještě formátovací tagy (<format>), a ty se bohužel nijak neprojevily. Můžete mi s tím prosím, poradit?
PHP: <?php $xml=simplexml_load_file("xml.xml"); $verseorder=$xml->properties->verseOrder; $versesorder=explode(' ',$verseorder); $verses=array_unique($versesorder); $verselyrics=$xml->lyrics->verse; foreach($verses as $versetitle){ $verse[$versetitle]=$xml->xpath('/song/lyrics/verse[@name="'.$versetitle.'"]'); } foreach($versesorder as $verseoutput){ echo'<p>'.var_dump($verse[$verseoutput]).'</p>'; } ?> <html> <head> <meta http-equiv="content-type" content="text/html charset=UTF-8" /> </head> <body> <?php echo$verselyrics; echo '<h1>'.$xml->properties->titles->title.'</h1>'; foreach($verses as $oneverse){ echo$oneverse.' | '; } foreach($xml->properties->authors->author as $authorname){ echo$authorname.', '; } echo'<p>'.$xml->lyrics.'</p>'; ?> <?xml version='1.0' encoding='UTF-8'?> <song xmlns="http://openlyrics.info/namespace/2009/song" version="0.8" createdIn="OpenLP 2.0.3" modifiedIn="OpenLP 2.0.3" modifiedDate="2013-10-19T16:08:39"> <properties> <titles> <title>Song0148329</title> </titles> <verseOrder>c1 v1 c1 v1 c1</verseOrder> <authors> <author>Autor1</author> <author>Autor2</author> </authors> </properties> <format> <tags application="OpenLP"> <tag name="lfloa"> <open><p style="float:left; width:50%;"></open> <close></p></close> </tag> <tag name="trans"> <open><p style="text-align:right; color:#555555;float:left;width:50%;"></open> <close></p></close> </tag> </tags> </format> <lyrics> <verse name="c1"> <lines> <tag name="lfloa">Float left text písně</tag> <tag name="trans">Float left překlad</tag> </lines> </verse> <verse name="v1"> <lines> <tag name="lfloa">Float left text písně</tag> <tag name="trans">Float left překlad</tag> </lines> </verse> </lyrics> </song> |
||
Tabetha Profil |
#2 · Zasláno: 5. 12. 2013, 14:36:26
môžeš sem hodiť aj ten text nejaký?
|
||
roboti006 Profil * |
#3 · Zasláno: 5. 12. 2013, 15:14:11
ok tady jsem to zjednodušil na dvě sloky, ať to nezabírá místo, ale celý text je tu:
<song xmlns="http://openlyrics.info/namespace/2009/song" version="0.8" createdIn="OpenLP 2.0.3" modifiedIn="OpenLP 2.0.3" modifiedDate="2013-11-11T18:55:32"> <properties> <titles> <title>Come, people of the risen King,</title> </titles> <verseOrder>v1 c1 v2 c1 v3 c1 c1</verseOrder> <authors> <author>Come</author> <author>People</author> <author>Keith and Kristyn Getty and Stuart Townend</author> </authors> </properties> <format> <tags application="OpenLP"> <tag name="lfloa"> <open><p style="float:left; width:45%;margin-left:3%;"></open> <close></p></close> </tag> <tag name="trans"> <open> <p style="text-align:right; color:#cccccc;float:left;width:45%;margin-right:5%"> </open> <close></p></close> </tag> </tags> </format> <lyrics> <verse name="v1"> <lines> <tag name="lfloa"> Come, people of the risen King, <br/> Who delight to bring him praise. <br/> Come all, and tune your hearts to sing <br/> To the Morning star of grace. <br/> From the shifting shadows of the Earth <br/> We will lift our eyes to Him <br/> Where steady arms of mercy reach <br/> To gather children in. </tag> <br/> <tag name="trans"> Pojďte, lidé vzkříšeného Krále, <br/> Kteří mu s potěšením přinášíte chválu. <br/> Pojďte všichni a nalaďte svá srdce ke zpěvu <br/> Pro Jitřní hvězdu milosti. <br/> Od nestálých stínů země <br/> Pozvedáme své oči k Němu, <br/> Kde pevné paže milosti vztáhnou se, <br/> Aby shromáždily své děti. </tag> </lines> </verse> <verse name="c1"> <lines> <tag name="lfloa"> Rejoice, rejoice, let every tongue rejoice <br/> One heart, one voice, <br/> Oh, church of Christ, rejoice! </tag> <br/> <tag name="trans"> Jásej, jásej, každý jazyk ať jásá <br/> Jedno srdce, jeden hlas <br/> Církvi Kristova, jásej! </tag> </lines> </verse> <verse name="v2"> <lines> <tag name="lfloa"> Come those whose joy is morning sun <br/> And those weeping through the night. <br/> Come those who tell of battles won <br/> And those struggling in the fight. <br/> For His perfect love will never change <br/> And His mercies never cease <br/> But follow us through all our days <br/> With the certain hope of peace. </tag> <br/> <tag name="trans"> Pojďte, vy, jejichž radostí je ranní slunce, <br/> I vy, kdo pláčete celou noc. <br/> Pojďte vy, kdo vyprávíte o vyhraných bitvách <br/> I vy, kdo zápasíte v boji. <br/> Neboť Jeho dokonalá láska se nikdy nezmění <br/> A Jeho milosrdenství nikdy neskončí, <br/> Ale projde s námi všemi našimi dny <br/> S pevnou nadějí pokoje. </tag> </lines> </verse> <verse name="v3"> <lines> <tag name="lfloa"> Come young and old from ev´ry land <br/> Men and women of the faith. <br/> Come those with full or empty hands, <br/> Find the riches of His grace. <br/> Over all the world His people sing <br/> Shore to shore we hear them call <br/> The Truth that cries through ev´ry age: <br/> „Our God is all in all!“ </tag> <br/> <tag name="trans"> Pojďte mladí i staří ze všech zemí <br/> Muži i ženy víry. <br/> Pojďte, ať máte ruce plné nebo prázdné, <br/> Najděte bohatství Jeho milosti. <br/> V celém světě Jeho lidé zpívají <br/> Od pobřeží k pobřeží je slyšíme volat <br/> Pravdu, která v každém věku jásá: <br/> „Náš Bůh je všechno ve všem!“ </tag> </lines> </verse> </lyrics> </song> |
||
Tabetha Profil |
#4 · Zasláno: 5. 12. 2013, 16:22:06
tak po polhodinovom skúšaní, ti to nenačíta xpath a evidentne kvôli
<song xmlns="http://openlyrics.info/namespace/2009/song" version="0.8" createdIn="OpenLP 2.0.3" modifiedIn="OpenLP 2.0.3" modifiedDate="2013-11-11T18:55:32"> |
||
roboti006 Profil * |
#5 · Zasláno: 5. 12. 2013, 17:52:35
No, kdybych to měl z každé písně ručně odstraňovat, vyšlo by mi jednodušší přepsat písně do požadovaného formátu ručně. Nejde toto nějak obejít?
popř. není chyba kdesi v mém kódě? Hrál jsem si trochu s kódem, stále nic moc, ale už jsem nalezl text... jen nevím jak to udělat, abych měl jen ten text + nějaké to formátování: foreach($xml->lyrics->verse as $blablabla){ echo'<p>'; var_dump($blablabla); echo'</p>'; echo'<br/>'; } object(SimpleXMLElement)#5 (2) { ["@attributes"]=> array(1) { ["name"]=> string(2) "c1" } ["lines"]=> object(SimpleXMLElement)#8 (1) { ["tag"]=> array(2) { [0]=> string(23) "Float left text písně" [1]=> string(19) "Float left překlad" } } } object(SimpleXMLElement)#8 (2) { ["@attributes"]=> array(1) { ["name"]=> string(2) "v1" } ["lines"]=> object(SimpleXMLElement)#5 (1) { ["tag"]=> array(2) { [0]=> string(23) "Float left text písně" [1]=> string(19) "Float left překlad" } } } |
||
Tabetha Profil |
roboti006:
skúsim či by ti pomohol takýto nástrel, nemal som doteraz viac času sa tomu venovať, ale chvíľu som si našiel. Vlastne ide o to, že si to XML pretvor do nejakej entity, poľa, objektu a navrhneš si to malo hlavu pätu (čo je logické) a šlo z toho dobre vygenerovať html. Dúfam, že to nebolo zbytočné :) <?php $xml = new SimpleXMLElement("xml.xml", 0, true); $verseorder = $xml->properties->verseOrder; $versesorder = explode(' ', $verseorder); $verses = array_unique($versesorder); /** @var SimpleXMLElement $a */ $verselyrics = $xml->lyrics->verse; $verse = array(); foreach ($xml->lyrics->verse as $a) { $atrs = $a->attributes(); $name = (string)$atrs[0]; // foreach ($a->lines->tag as $tag) { // $_atrs = $tag->attributes(); // $_name = (string)$_atrs[0]; // $verse[$name][$_name] = (string)$tag; // } $verse[$name] = array( 'original' => (string)$a->lines->tag[0], 'translated' => (string)$a->lines->tag[1], ); } foreach ($versesorder as $verseoutput) { echo '<p>' . (isset($verse[$verseoutput]) ? $verse[$verseoutput]['original'] : null) . '</p>'; } ?> |
||
roboti006 Profil * |
#7 · Zasláno: 6. 12. 2013, 12:41:59
Určitě pomohl... S tímto už určitě nějak dovedu pracovat. Jen ještě maličkost, dá se nějak udělat, aby to ignorovalo další tagy uvnitř textu?
tzn. kdybych měl kód <tag name="trans"> Jásej, jásej, <tag>každý</tag> jazyk ať jásá <br/> Jedno srdce, jeden hlas <br/> Církvi Kristova, jásej! </tag> |
||
Anonymousse Profil * |
#8 · Zasláno: 6. 12. 2013, 13:19:20
strip_tags?
|
||
Časová prodleva: 10 let
|
0