Chciałbym stworzyć poprawny dokument xml. Mam coś takiego:

  1.  
  2. <articlelist>
  3.    <article>
  4.        <title>example title</title>
  5.        <author>example author</author>
  6.        <shortcontent>example content</shortcontent>
  7.        <hascomments>example comments</hascomments>
  8.    </article>
  9. </articlelist>


Jak napisać poprawne dtd do tego? Bo na razie mam coś takiego, ale XMLReader sypie mi warningami (co w sumie dziwne nie jest, bo wiem że robię błąd, tylko nie wiem jak go nie robić winksmiley.jpg ):

  1.  
  2. <!DOCTYPE articlelist, article [
  3. <!ELEMENT articlelist (article)>
  4. <!ELEMENT article (title,author,shortcontent,hascomments)>
  5. <!ELEMENT title (#PCDATA)>
  6. <!ELEMENT author (#PCDATA)>
  7. <!ELEMENT shortcontent (#PCDATA)>
  8. <!ELEMENT hascomments (#PCDATA)>
  9. ]>


I próbowałem kilku kombinacji, np. deklarowałem drugiego doctype poniżej ELEMENT articlelist, i w sumie jeszcze kilka innych rzeczy, ale dokument wciąż nie jest poprawny. Any suggestions?

Druga sprawa - to jest w zasadzie plik cache, który będzie trzymał to, co sami widzicie po nazwach elementów. Implementację odczytywania pliku w php chciałbym napisać tak, żeby nie była na sztywno - czyli jak przyjdzie inny programista i sobie powie, że np. element, który teraz nosi nazwę author, ma się nazywać authors i być rodzicem kilku innych elementów author (np. kiedy będzie kilku autorów winksmiley.jpg ), to nie będzie musiał nic w niej zmieniać. Myślę sobie o tym i wymyśliłem że będę wywoływał odpowiedzialną za to metodę rekurencyjnie, ale tu powstaje problem z tablicą, w której wszystko będzie zapisywane. Teraz mam tak:

  1. <?php
  2. $array = array();
  3.  
  4. while($dbObject -> read())
  5. {
  6.  $array[$dbObject -> name] = $dbObject -> value;
  7. }
  8. ?>


Wiadomo, nie ma problemu kiedy plik jest załóżmy taki jak wyżej. Wtedy tablica wygląda tak: $array['title']['tytuł'], ale co zrobić żeby w razie potrzeby odpowiedni jej element wyglądał tak: $array['authors']['author']['Kowalski'] $array['authors']['author']['Nowak'], albo nawet $array['authors']['author']['firstauthor']['Kowalski']?

Ok, po chwili odpoczynku w końcu znalazłem poprawne rozwiązanie:

  1.  
  2. <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
  3. <!DOCTYPE articlelist [
  4. <!ELEMENT articlelist (article+)>
  5. <!ELEMENT article (title,author,shortcontent,hascomments)>
  6. <!ELEMENT title (#PCDATA)>
  7. <!ELEMENT author (#PCDATA)>
  8. <!ELEMENT shortcontent (#PCDATA)>
  9. <!ELEMENT hascomments (#PCDATA)>
  10. ]>
  11. <articlelist>
  12.    <article>
  13.        <title>example title</title>
  14.        <author>example author</author>
  15.        <shortcontent>example content</shortcontent>
  16.        <hascomments>example comments</hascomments>
  17.    </article>
  18. </articlelist>


Aktualne jednak pozostaje moje drugie pytanie.

A w międzyczasie zrodziło się kolejne. Używając tego kodu wyżej do przypisywania wartości tablicy array, po wydrukowaniu par klucz => wartość dostaję coś takiego:

articlelist
articlelist
#text
article
#text
title
#text example title
title
#text
author
#text example author
author
#text
shortcontent
#text example content
shortcontent
#text
hascomments
#text example comments
hascomments
#text
article
#text
articlelist