Autor Zpráva
Prochy
Profil
Dobrý den,

snažim se zpracovat stránky naší menzy. Jednotlivá jídla dokážu získat v pohodě pomocí SelectNodes. Html kód je následující:

<div id="jid_txt"><h3 class="o"><span>Obědy</span><span class="volno">45</span></h3>
 <ul class="sel_off">
  <li class="j_pol">&nbsp;&nbsp;</li>
  <li class="popis">
    <ul>
      <li class="porce">&nbsp;<div class="nahled"></div></li>
      <li class="nazev">Polévka : Kulajda</li>
    </ul>
  </li>
  <li class="clr"></li>
 </ul>
 <ul class="sel_off">
  <li class="j_nor">1</li>
  <li class="popis">
    <ul>
      <li class="porce">3 porce<div class="nahled"></nahled></li>
      <li class="nazev">Drůbeží na kari, jasmínová rýže</li>
      <li class="cena"></li>
    </ul>
  </li>
  <li class="clr"></li>
 </ul>
 <ul class="sel_off">
  <li class="j_nor">2</li>
  <li class="popis">
    <ul>
      <li class="porce">2 porce<div class="nahled"></nahled></li>
      <li class="nazev">Sekané polpety ., brambory</li>
      <li class="cena"></li>
    </ul>
  </li>
  <li class="clr"></li>
 </ul>
 <ul class="sel_off">
  <li class="j_bez">3</li>
  <li class="popis">
    <ul>
      <li class="porce">Vyprodáno<div class="nahled"></nahled></li>
      <li class="nazev">Frankfurtská vepř. peč., h. k. BEZ POLÉVKY</li>
      <li class="cena"></li>
    </ul>
  </li>
  <li class="clr"></li>
 </ul>
 <ul class="sel_off">
  <li class="j_bez">4</li>
  <li class="popis">
    <ul>
      <li class="porce">Vyprodáno<div class="nahled"></nahled></li>
      <li class="nazev">Ďábelská kotleta, op. brambor BEZ POLÉVKY</li>
      <li class="cena"></li>
    </ul>
  </li>
  <li class="clr"></li>
 </ul>
 <ul class="sel_off">
  <li class="j_bez">5</li>
  <li class="popis">
    <ul>
      <li class="porce">40 porcí<div class="nahled"></nahled></li>
      <li class="nazev">70g Debrecínská vepř. peč., rýže BEZ POLÉVKY</li>
      <li class="cena"></li>
    </ul>
  </li>
  <li class="clr"></li>
 </ul>
</div>
Jednotlivá jídla získám pomocí:
DocumentNode.SelectNodes("//ul[@class=\"sel_off\"]"))

Problém je v tom, že když je např. pondělí, tak tam sou i večeře a Html kód je tento:

<div id="jid_txt"><h3 class="o"><span>Obědy</span><span class="volno">275</span></h3>
 <ul class="sel_off">
  <li class="j_pol">&nbsp;&nbsp;</li>
  <li class="popis">
    <ul>
      <li class="porce">&nbsp;<div class="nahled"></div></li>
      <li class="nazev">Polévka : Krupicová s vejci</li>
    </ul>
  </li>
  <li class="clr"></li>
 </ul>
 <ul class="sel_off">
  <li class="j_nor">1</li>
  <li class="popis">
    <ul>
      <li class="porce">11 porcí<div class="nahled"></nahled></li>
      <li class="nazev">100g Hov. koprová omáčka, h. k.</li>
      <li class="cena"></li>
    </ul>
  </li>
  <li class="clr"></li>
 </ul>
 <ul class="sel_off">
  <li class="j_nor">2</li>
  <li class="popis">
    <ul>
      <li class="porce">125 porcí<div class="nahled"></nahled></li>
      <li class="nazev">Drůbeží plátek, dušený hrášek mrkví, brambory</li>
      <li class="cena"></li>
    </ul>
  </li>
  <li class="clr"></li>
 </ul>
 <ul class="sel_off">
  <li class="j_nor">3</li>
  <li class="popis">
    <ul>
      <li class="porce">18 porcí<div class="nahled"></nahled></li>
      <li class="nazev">Sojové po čínsku, rýže</li>
      <li class="cena"></li>
    </ul>
  </li>
  <li class="clr"></li>
 </ul>
 <ul class="sel_off">
  <li class="j_vyb">4</li>
  <li class="popis">
    <ul>
      <li class="porce">8 porcí<div class="nahled"></nahled></li>
      <li class="nazev">Výběr : Vepř. žebírko po revírnicku, bram. krokety</li>
      <li class="cena"></li>
    </ul>
  </li>
  <li class="clr"></li>
 </ul>
 <ul class="sel_off">
  <li class="j_nor">5</li>
  <li class="popis">
    <ul>
      <li class="porce">32 porcí<div class="nahled"></nahled></li>
      <li class="nazev">70g Hov. koprová omáčka, h. k.</li>
      <li class="cena"></li>
    </ul>
  </li>
  <li class="clr"></li>
 </ul>
 <ul class="sel_off">
  <li class="j_bez">6</li>
  <li class="popis">
    <ul>
      <li class="porce">81 porcí<div class="nahled"></nahled></li>
      <li class="nazev">Peč. bůček na česneku, špenát, br. knedlík BEZ POLÉVKY</li>
      <li class="cena"></li>
    </ul>
  </li>
  <li class="clr"></li>
 </ul><h3 class="v"><span>Večeře</span><span class="volno">118</span></h3>
 <ul class="sel_off">
  <li class="j_pol">&nbsp;&nbsp;</li>
  <li class="popis">
    <ul>
      <li class="porce">&nbsp;<div class="nahled"></div></li>
      <li class="nazev">Polévka : Kedlubnová</li>
    </ul>
  </li>
  <li class="clr"></li>
 </ul>
 <ul class="sel_off">
  <li class="j_nor">1</li>
  <li class="popis">
    <ul>
      <li class="porce">62 porcí<div class="nahled"></nahled></li>
      <li class="nazev">Kuřecí soté s houbami, kus-kus</li>
      <li class="cena"></li>
    </ul>
  </li>
  <li class="clr"></li>
 </ul>
 <ul class="sel_off">
  <li class="j_nor">2</li>
  <li class="popis">
    <ul>
      <li class="porce">56 porcí<div class="nahled"></nahled></li>
      <li class="nazev">Zap. těstoviny s uzeninou, čal.</li>
      <li class="cena"></li>
    </ul>
  </li>
  <li class="clr"></li>
 </ul><h3 class="m"><span>Minutky</span></h3>
 <ul class="sel_off">
  <li class="j_pol">1</li>
  <li class="popis">
    <ul>
      <li class="porce"><div class="nahled"></nahled></li>
      <li class="nazev">Polévka pórková</li>
      <li class="cena"></li>
    </ul>
  </li>
  <li class="clr"></li>
 </ul>
 <ul class="sel_off">
  <li class="j_nor">2</li>
  <li class="popis">
    <ul>
      <li class="porce"><div class="nahled"></nahled></li>
      <li class="nazev">Drůbeží steak na grilu, zeleninová obloha</li>
      <li class="cena"></li>
    </ul>
  </li>
  <li class="clr"></li>
 </ul>
 <ul class="sel_off">
  <li class="j_nor">3</li>
  <li class="popis">
    <ul>
      <li class="porce"><div class="nahled"></nahled></li>
      <li class="nazev">Vepř. panenky s nivou, zeleninová obloha</li>
      <li class="cena"></li>
    </ul>
  </li>
  <li class="clr"></li>
 </ul>
 <ul class="sel_off">
  <li class="j_nor">4</li>
  <li class="popis">
    <ul>
      <li class="porce"><div class="nahled"></nahled></li>
      <li class="nazev">Dr. nudličky se smtanou a ananasem, zeleninová obloha</li>
      <li class="cena"></li>
    </ul>
  </li>
  <li class="clr"></li>
 </ul>
 <ul class="sel_off">
  <li class="j_nor">5</li>
  <li class="popis">
    <ul>
      <li class="porce"><div class="nahled"></nahled></li>
      <li class="nazev">Smažený hermelín, tatar. om., zeleninová omáčka</li>
      <li class="cena"></li>
    </ul>
  </li>
  <li class="clr"></li>
 </ul>
 <ul class="sel_off">
  <li class="j_nor">6</li>
  <li class="popis">
    <ul>
      <li class="porce"><div class="nahled"></nahled></li>
      <li class="nazev">Smažená zelenina, tatr. om., zeleninová obloha</li>
      <li class="cena"></li>
    </ul>
  </li>
  <li class="clr"></li>
 </ul>
 <ul class="sel_off">
  <li class="j_nor">7</li>
  <li class="popis">
    <ul>
      <li class="porce"><div class="nahled"></nahled></li>
      <li class="nazev">Losos s bylinkovým dipem, zeleninová obloha</li>
      <li class="cena"></li>
    </ul>
  </li>
  <li class="clr"></li>
 </ul>
 <ul class="sel_off">
  <li class="j_nor">8</li>
  <li class="popis">
    <ul>
      <li class="porce"><div class="nahled"></nahled></li>
      <li class="nazev">Gyros, tzatziky, zeleninová obloha</li>
      <li class="cena"></li>
    </ul>
  </li>
  <li class="clr"></li>
 </ul><h3 class="c"><span>Chlazené</span></h3>
 <ul class="sel_off">
  <li class="j_nor">1</li>
  <li class="popis">
    <ul>
      <li class="porce"><div class="nahled"></nahled></li>
      <li class="nazev">Chlazená jednoporcová jídla</li>
      <li class="cena"></li>
    </ul>
  </li>
  <li class="clr"></li>
 </ul>
</div>

A já bych potřeboval vybrat samostatně obědy, minutky, večeře a vůbec mě nenapadá, jak by se to dalo oddělit. Napadlo mě, jestli by to nešlo udělat regulárem, ale nemám s nima zkušenosti, takže nevim, jetsli je něco takového vůbec možný.

Když to shrnu potřeboval bych vybrat kód mezi tagy <h3 class="o"><span>Obědy</span></h3> až po tag, kterej není z těchto dvou ul, li. Nic moc mě nenapadlo, ještě sem si říkal, jestli nejde získat tag před a za tím, který mám právě vyhledaný, ale bohužel žádnou takovou funkci sem nenašel. Dělám to v .NETu(C#), tak snad to nebude vadit, spíš mi tady de o logickou věc, jak to získat.

Způsobem, jakým to dělám teď, je ten, že si počítám kolik sem našel polévek a podle toho zjistim na jakém menu sem.

Máte někdo nějaké lepší návrhy?

Děkuji za odpověď
Joker
Profil
Prochy:
Předpokládám, že upravit to HTML do nějaké použitelné podoby není možné?
Totiž i použití ul-li pro jednotlivá jídla mi přijde dost nevhodné, hlavně když seznam těch jídel je zjevně číslovaný seznam.

Ale šlo by to udělat tak, že by se vzaly všechny děti toho <div id="jid_txt"> a pak brát postupně všechny elementy, když to bude <ul class="sel_off"> přidat jídlo a když to bude <h3>, změnit kategorii.
mimochodec
Profil
Nejsem si úplně jist, jak si http://simplehtmldom.sourceforge.net poradí s porušenými a nespárovatelnými tagy, ale zkusil bych tu stránku explodnout textem "<h3", čímž ty seznamy od sebe oddělíš a pak pomocí simplehtmldom získat obsah prvního spanu a následně všech <ul class="sel_off">.

Vaše odpověď


Prosím používejte diakritiku a interpunkci.

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