Autor Zpráva
leorond
Profil
Ahoj, až do nedávna jsem pracoval hlavně s databázemi MySQL a MSSQL, vím jak od tud vypsat data abych dostal správný výsledek ale v současné době se snažím naučit pracovat více také s XML soubory.

Nepíšu že mám problém, přeci jen bych mohl klidně využít například databázi ale rád bych zjistil jak vypsat například takovíto XML soubor, myslím všechny články v tomto souboru.

<aktuality>
  <clanek>1</clanek>
  <nadpis>Nadpis</nadpis>
  <text>Text clánku</text>
  <clanek>2</clanek>
  <nadpis>Nadpis</nadpis>
  <text>Text clánku</text>
  <clanek>3</clanek>
  <nadpis>Nadpis</nadpis>
  <text>Text clánku</text>
</aktuality>

Také by mne zajímalo jak mohu zjistit počet článků.

Mohl by jste mi s tímto někdo pomoci? Tak nějak abych to pochopil? Děkuji mnohokrát.
Pavlínka
Profil
třeba nějak takto???
není to nic extra a dá se to udělat i jinak ale je to asi nejsnažší pokud chceš vypisovat více věcí

header("Content-Type: application/xml; charset=utf-8");
echo "<"."?xml version=\"1.0\" encoding=\"UTF-8\"?".">
<aktuality>";
$spojeni=mysql_connect("$MySQL_server","$MySQL_user","$MySQL_user_password");

$co="SELECT *  FROM `neco` blabla...";
$navrat=mysql_db_query("$MySQL_db", $co, $spojeni);
for ($i=0;$i<mysql_num_fields($navrat);
$i++){
}
while (list($id, $nadpis, $text, $atd) = mysql_fetch_row($navrat))
{
echo "
  <clanek>$id</clanek>
  <nadpis>$nadpis</nadpis>
  <text>$text</text>";
}
echo "
</aktuality>";



ještě dodám... že xml by mělo být pro snažší výpis uzavřený do samostatných elementů

<aktuality>
 <blabla>
  <clanek>1</clanek>
  <nadpis>Nadpis</nadpis>
  <text>Text clánku</text>
 </blabla>
 <blabla>
  <clanek>2</clanek>
  <nadpis>Nadpis</nadpis>
  <text>Text clánku</text>
 </blabla>
 <blabla>
  <clanek>3</clanek>
  <nadpis>Nadpis</nadpis>
  <text>Text clánku</text>
 </blabla>
</aktuality>

alespoň když jsem teda vždy s xml pracovala tak se to vypisovalo takto :)
leorond
Profil
Já ti nevím, přijde mi to spíš jako výpis z MySQL do XML.

Mám XML soubor do kterého mohu přidávat články a pokud je budu chtít vypsat tak to udělám následovně

$CestaXML  =  simplexml_load_file('cesta/name.xml');

$CisloClanku  =  '0';  // 0  =  <clanek>1</clanek>

$TextClanku  =  htmlspecialchars($CestaXML->text[$CisloClanku]);

print($TextClanku);

Pokud bych ale dokázal spočítat všechny články tak bych také dokázal všechny články i vypsat přes for().

Pavlínka: Vím že by to bylo lepší ale jen jsem uvedl příklad XML, samozřejmě mám úplně jiný soubor.
juriad
Profil
Pavlínka:
Hodně štěstí až bude článek obsahovat HTML značky. On ani ten zbytek zdrojáku není vhodný k publikaci (mysql_* funkce).
S druhou částí máš pravdu.

leorond:
Vždyť můžeš použít foreach:
$i = 0;
foreach ($CestaXML->text as $text) {
  $i++;
  echo $i, $text;
}
Pavlínka
Profil
leorond:
Já ti nevím, přijde mi to spíš jako výpis z MySQL do XML.

a to jsi nechtěl? :D


juriad:
Hodně štěstí až bude článek obsahovat HTML značky. On ani ten zbytek zdrojáku není vhodný k publikaci (mysql_* funkce).
S druhou částí máš pravdu.

já jsem hodně v začátcích :D promiň :D
vím že se to dá napsat i jinak ale já bych to udělala takto :D :( ... ovšem záleželo by na situaci


leorond:
Vždyť můžeš použít foreach:
pokud by chtěl spočítat články tak spíše

$i = 0;
foreach ($CestaXML->text as $text) {
  $i++;
}
  echo $i;
leorond
Profil
juriad: Děkuji to je pravda, pro výpis je to dobré.

Nyní ještě vymyslet jak spočítat řádky.


Jinak dejme tomu že tedy budu vypisovat XML soubor

<?xml version="1.0" encoding="UTF-8"?>
<test>
    <clanek>
        <id>1</id>
        <nadpis>Nadpis 1</nadpis>
        <text>Text prvního článku.</text>
    </clanek>
    <clanek>
        <id>2</id>
        <nadpis>Nadpis 2</nadpis>
        <text>Text druhého článku.</text>
    </clanek>
    <clanek>
        <id>3</id>
        <nadpis>Nadpis 3</nadpis>
        <text>Text třetího článku.</text>
    </clanek>
    <clanek>
        <id>4</id>
        <nadpis>Nadpis 4</nadpis>
        <text>Text čtvrtého článku.</text>
    </clanek>
</test>

Přes foreach()

<?php 
$TestXML        =    simplexml_load_file('./xml/test.xml');

$i = 0;
if(count($TestXML->clanek)    >    0)    {
    foreach ($TestXML->clanek as $clanek) {
        $i++;
        print('<div>'.$i.' - '.htmlspecialchars($clanek->text).'</div>');
    }
}    else {
    print('Žádné články');
}
?>

V tom případě takto si spočítám články

print(count($TestXML->clanek));



Nebo případně by mělo fungovat i jen print(count($TestXML));


Jsem na toho count()a úplně zapomněl :D a toho používám dost často :D


Nebude vadit že si tu udělám takovej malej poznámkovej blok při tvorbě stránkování? :D
leorond
Profil
Teprve prototype ale pracuji na tom co to jde.

<?php 
// Cesta k XML souboru
$TestXML        =    simplexml_load_file('./xml/test.xml');    
// Článků na stránku
$PoNaStranku    =    2;
// Pokud bude stránka prázdná
if(empty($_GET['stranka']))    {
    $Stranka    =    1;
}    else {
    $Stranka    =    intval($_GET['stranka']);
}

$min    =    $Stranka*$PoNaStranku-($PoNaStranku+1);
$max    =    $Stranka*$PoNaStranku;

// Počítáme id článků od 0, ($cislo+1) = počítání od 1
$i = 0;
foreach ($TestXML->clanek as $clanek) {
    $cislo    =    $i++;
    if($cislo > $min AND $cislo < $max)    {
        print('<div>'.($cislo+1).' - '.htmlspecialchars($clanek->text).'</div>');
    }
}
// Předchozí strana = aktuální strana - 1
$Predchozi        =    $Stranka-1;
// Následující strana = aktuální stránka +1
$Nasledujici    =    $Stranka+1;
// Celkový počet strának = počet článků : počet článků na stránku
$PocetStranek    =    count($TestXML)/$PoNaStranku;
// Pokud je počet článků > než počet článků na stránku
if(count($TestXML)    >    $PoNaStranku)    {
    // Odkaz na následující stránku pokud je počet příspěvků na stránku < než počet článků a pokud stránka je < než celkový počet stránek
    if($PoNaStranku    <    count($TestXML) AND $Stranka    <    ceil($PocetStranek))    {
        print_r('<a href="test.php?stranka='.$Nasledujici.'">Následující stránka </a>');
    }
    // Odkaz na předchozí stránku pokud je stránka > než 1
    if($Stranka    >    1)    {
        print_r('<a href="test.php?stranka='.$Predchozi.'"> Předchozí stránka</a>');
    }
}
// Celkový počet stránek
print_r('<p>Počet stránek: '.ceil($PocetStranek).'</p>');
?>

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm:

0