<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0"><channel><title><![CDATA[C++ Datenbank: dynamische Templates?]]></title><description><![CDATA[<p>Hallo!<br />
ich will mit C++ eine kleine Datenbank erstellen, die auf binären Bäumen basiert. Jeder Baum ist eine Tabelle, ich habe mir das so vorgestellt:</p>
<pre><code>BENUTZERKLASSE/INTERFACE                            
                                    |
                                   \ /
                                HEAD-KNOTEN
                               /     |     \
                              /\    / \    /\
                             NODE   NODE   NODE
                              ||     ||     ||
                             NODE   NODE   NODE
                              ||     ||     ||
                                    usw...
                              ||     ||     ||
                             ENDNODE ENODE  ENDNODE
</code></pre>
<p>Jeder Linie ist ein Next bzw. Prev-Zeiger. Mann kann im Headnode eine beliebige Anzahl an Verzweigungen wählen, hier sind es z.B. 3, dabei stellt jede Verzweigung eine Tabellenspalte dar, die dann doppelt verkettet bis zum Endnode weitergeführt wird.<br />
Im HeadKnoten müssen also eine dynamische Anzahl an Zeigern bzw. Spalten gespeichert werden. Fall: Eine Spalte soll &quot;ID&quot; heißen und int-Werte speichern. Die zweite heißt &quot;Name&quot; und soll Strings speichern, die dritte heißt Gehalt und soll long-Werte speichern. So soll dann die Tabelle aussehen:</p>
<pre><code>=======Gehälter======
+----+-------+--------+
| [b][u]ID[/u][/b] | [b][u]Name[/u][/b]  | [b][u]Gehalt[/u][/b] |
+----+-------+--------+
| 0  | Hans  | 2500   | = NODE-Ebene 1
+----+-------+--------+
| 1  | Peter | 3900   | = NODE-Ebene 2
+----+-------+--------+
|... | ...   |  ...   | = NODE-Ebenen
+----+-------+--------+
| N  | Max   |   9999 | = NODE-Ebene N
+----+-------+--------+
</code></pre>
<p>Um die Zeiger auf die Spalten speichern zu können, würde ich eine std::map&lt;std::string, Node&lt;T&gt;<em>&gt; verwenden. Der std::string ist jeweils der Spaltenname, Node&lt;T&gt;</em> der eigentliche Zeiger auf den ersten Node in Ebene 1 von dieser Spalte mit dem Namen von std::string, T ist der gewählte Datentyp für diese Spalte, z.B. int für &quot;ID&quot;. Node&lt;T&gt; muss dafür ein Template sein, logisch, je nach Datentyp/Objekt. Nur, wie speichere ich diese map als Attribut von HeadNode? Bei der Deklaration von der map ist ja noch nicht bekannt, welche Daten, besser, welches Template-Argument das Node bekommt.<br />
In Code so:</p>
<pre><code class="language-cpp">tempalte &lt;typename T&gt; // Template für abstrakte Basisklasse
class HeadNode : public INode&lt;T&gt; { // INode ist nur eine abstrakte Klasse
private:
   std::map&lt;std::string, Node&lt;T&gt;*&gt; spalten; 
   /* T als Templateargument von Node? Die Klasse wird doch nur einmal
      instanziiert, dann hätten ja alle Spalten den Datentyp T! Wie kann
      ich das Template-Argument von Node dynamisch halten?
   */
public:
   template &lt;typename N&gt; // Template für Datentyp der Spalte
   void SetColumn(std::string spaltenname) {
      spalten[spaltenname] = new Node&lt;N&gt;; // Neue Spalte mit neuem Node, Typ N als Template-Argument, die der Funktion, nicht der Klasse übergeben wird
   }

   // ...
};
</code></pre>
<p>Sorry, sehr komplex, das Problem zusammengefasst:<br />
Wie kann ich in einer einmalig instantiieren Klasse so eine Art dynamisches Template erhalten, das zur Laufzeit erst bestimmt wird und die demnach je nach mehrmaligem Methodenaufruf der Klasse verschieden sein kann? Ich bräuchte sowas wie:</p>
<pre><code class="language-cpp">template &lt;typename T&gt;
class HeadNode : public INode&lt;T&gt; {
private:
   template &lt;typename S&gt;
   std::map&lt;std::string, Node&lt;S&gt;*&gt; spalten; // Typ von Node erst bei Benutzung, nicht bei Klassenaufruf bestimmen
// ...
};
</code></pre>
<p>Design-Fehler?</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/244186/c-datenbank-dynamische-templates</link><generator>RSS for Node</generator><lastBuildDate>Sat, 19 Sep 2026 13:26:21 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/244186.rss" rel="self" type="application/rss+xml"/><pubDate>Fri, 26 Jun 2009 12:33:09 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to C++ Datenbank: dynamische Templates? on Fri, 26 Jun 2009 15:00:54 GMT]]></title><description><![CDATA[<p>Hallo!<br />
ich will mit C++ eine kleine Datenbank erstellen, die auf binären Bäumen basiert. Jeder Baum ist eine Tabelle, ich habe mir das so vorgestellt:</p>
<pre><code>BENUTZERKLASSE/INTERFACE                            
                                    |
                                   \ /
                                HEAD-KNOTEN
                               /     |     \
                              /\    / \    /\
                             NODE   NODE   NODE
                              ||     ||     ||
                             NODE   NODE   NODE
                              ||     ||     ||
                                    usw...
                              ||     ||     ||
                             ENDNODE ENODE  ENDNODE
</code></pre>
<p>Jeder Linie ist ein Next bzw. Prev-Zeiger. Mann kann im Headnode eine beliebige Anzahl an Verzweigungen wählen, hier sind es z.B. 3, dabei stellt jede Verzweigung eine Tabellenspalte dar, die dann doppelt verkettet bis zum Endnode weitergeführt wird.<br />
Im HeadKnoten müssen also eine dynamische Anzahl an Zeigern bzw. Spalten gespeichert werden. Fall: Eine Spalte soll &quot;ID&quot; heißen und int-Werte speichern. Die zweite heißt &quot;Name&quot; und soll Strings speichern, die dritte heißt Gehalt und soll long-Werte speichern. So soll dann die Tabelle aussehen:</p>
<pre><code>=======Gehälter======
+----+-------+--------+
| [b][u]ID[/u][/b] | [b][u]Name[/u][/b]  | [b][u]Gehalt[/u][/b] |
+----+-------+--------+
| 0  | Hans  | 2500   | = NODE-Ebene 1
+----+-------+--------+
| 1  | Peter | 3900   | = NODE-Ebene 2
+----+-------+--------+
|... | ...   |  ...   | = NODE-Ebenen
+----+-------+--------+
| N  | Max   |   9999 | = NODE-Ebene N
+----+-------+--------+
</code></pre>
<p>Um die Zeiger auf die Spalten speichern zu können, würde ich eine std::map&lt;std::string, Node&lt;T&gt;<em>&gt; verwenden. Der std::string ist jeweils der Spaltenname, Node&lt;T&gt;</em> der eigentliche Zeiger auf den ersten Node in Ebene 1 von dieser Spalte mit dem Namen von std::string, T ist der gewählte Datentyp für diese Spalte, z.B. int für &quot;ID&quot;. Node&lt;T&gt; muss dafür ein Template sein, logisch, je nach Datentyp/Objekt. Nur, wie speichere ich diese map als Attribut von HeadNode? Bei der Deklaration von der map ist ja noch nicht bekannt, welche Daten, besser, welches Template-Argument das Node bekommt.<br />
In Code so:</p>
<pre><code class="language-cpp">tempalte &lt;typename T&gt; // Template für abstrakte Basisklasse
class HeadNode : public INode&lt;T&gt; { // INode ist nur eine abstrakte Klasse
private:
   std::map&lt;std::string, Node&lt;T&gt;*&gt; spalten; 
   /* T als Templateargument von Node? Die Klasse wird doch nur einmal
      instanziiert, dann hätten ja alle Spalten den Datentyp T! Wie kann
      ich das Template-Argument von Node dynamisch halten?
   */
public:
   template &lt;typename N&gt; // Template für Datentyp der Spalte
   void SetColumn(std::string spaltenname) {
      spalten[spaltenname] = new Node&lt;N&gt;; // Neue Spalte mit neuem Node, Typ N als Template-Argument, die der Funktion, nicht der Klasse übergeben wird
   }

   // ...
};
</code></pre>
<p>Sorry, sehr komplex, das Problem zusammengefasst:<br />
Wie kann ich in einer einmalig instantiieren Klasse so eine Art dynamisches Template erhalten, das zur Laufzeit erst bestimmt wird und die demnach je nach mehrmaligem Methodenaufruf der Klasse verschieden sein kann? Ich bräuchte sowas wie:</p>
<pre><code class="language-cpp">template &lt;typename T&gt;
class HeadNode : public INode&lt;T&gt; {
private:
   template &lt;typename S&gt;
   std::map&lt;std::string, Node&lt;S&gt;*&gt; spalten; // Typ von Node erst bei Benutzung, nicht bei Klassenaufruf bestimmen
// ...
};
</code></pre>
<p>Design-Fehler?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1733282</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1733282</guid><dc:creator><![CDATA[Ad aCTa]]></dc:creator><pubDate>Fri, 26 Jun 2009 15:00:54 GMT</pubDate></item><item><title><![CDATA[Reply to C++ Datenbank: dynamische Templates? on Fri, 26 Jun 2009 12:54:26 GMT]]></title><description><![CDATA[<p>Ad aCTa schrieb:</p>
<blockquote>
<p>Sorry, sehr komplex, das Problem zusammengefasst:<br />
Wie kann ich in einer einmalig instantiieren Klasse dynamische Templates erhalten, die je nach mehrmaligem Methodenaufruf der Klasse verschieden sein können? Ich bräuchte sowas wie:</p>
<pre><code class="language-cpp">template &lt;typename T&gt;
class HeadNode : public INode&lt;T&gt; {
private:
   template &lt;typename S&gt;
   std::map&lt;std::string, Node&lt;S&gt;*&gt; spalten; // Typ von Node erst bei Benutzung, nicht bei Klassenaufruf bestimmen
// ...
};
</code></pre>
<p>Design-Fehler?</p>
</blockquote>
<p>Ja. &quot;Dynamische Templates&quot; ist ein Oxymoron.</p>
<p>Was hat denn Deine Datenstruktor gegenüber folgendem für Vorteile?</p>
<pre><code class="language-cpp">struct GehaelterDatenSatz {
    long id; // &lt;-- wofuer auch immer
    std::string name;
    double gehalt;
  };

  int main() {
    std::vector&lt;GehaelterDatenSatz&gt; g;
    // ...
  }
</code></pre>
<p>Sprich: Was soll da wo &quot;dynamisch&quot; laufen?</p>
<p>Du musst ja nicht eine SQL enginge nachbauen. Wenn Du etwas besseres brauchst, kannst Du Dir ja dafür eine gescheite Bibliothek suchen, statt das Rad neu zuerfinden.</p>
<p>Gruß,<br />
SP</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1733299</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1733299</guid><dc:creator><![CDATA[Sebastian Pizer]]></dc:creator><pubDate>Fri, 26 Jun 2009 12:54:26 GMT</pubDate></item><item><title><![CDATA[Reply to C++ Datenbank: dynamische Templates? on Fri, 26 Jun 2009 13:10:01 GMT]]></title><description><![CDATA[<p>Um den Sinn geht es mir hierbei nicht, ich bin Hobby-Programmierer. <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f609.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--winking_face"
      title=";)"
      alt="😉"
    /></p>
<p>Ich will keine 250.000-Codezeilen-SQL-Engine nachbauen, nur so etwas in der Art und nicht so ewig groß und komplex. So mal eben ein Struct zu erstellen namens Gehalt geht natürlich nicht, da ich ja das Speicherdesign dem Nutzer überlassen will.<br />
Id ist übrigens dazu da, um auf die Elemente zugriefen zu können. <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f609.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--winking_face"
      title=";)"
      alt="😉"
    /> Spaltenname + ID = einzelner, eindeutiger Wert!</p>
<blockquote>
<p>&gt; &quot;Dynamische Templates&quot; ist ein Oxymoron.</p>
</blockquote>
<p>Dessen bin ich mir ja bewusst, dass Templates zur Kompilierzeit festgelegt werden. Aber ich brauche irgendetwas, damit ich verschiedene Typen dynamisch in irgendeiner Struktur speichern kann. Da sind sowohl Arrays alsauch Templates mehr als ungeeignet. Was kann man da tun? Ich dachte z.B. an virtuelle Typen, d.h. ich habe eine abstrakte Klasse IType, von ihr erbt z.B. MyInteger, die von jedem C++-Datentyp ein Attribut, gespeichert in einer union, hat. In einem einmaligen Zugriff lege ich den Wert hinein in das Attribut, welches den Datentyp des zu speichernden Wertes hat. Dann kann ich mit dynamic_cast versuchen, das in IType zu konvertieren und in ihm eine Information speichern, welcher Typ das mal war und ich dem Baum abspeichern, beim Abruf von diesem IType konvertiere ich es mithilfe der Information in den alten Typ zurück.<br />
Der Weg klingt für mich trotzdem nicht sehr schön, ich weiß nicht mal, ob das funktioniert. Gibt es andere Wege?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1733311</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1733311</guid><dc:creator><![CDATA[Ad aCTa]]></dc:creator><pubDate>Fri, 26 Jun 2009 13:10:01 GMT</pubDate></item><item><title><![CDATA[Reply to C++ Datenbank: dynamische Templates? on Fri, 26 Jun 2009 13:19:47 GMT]]></title><description><![CDATA[<p>Es gibt andere Sprachen dafuer, C++ ist wahrscheinlich nicht dafuer geeignet.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1733319</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1733319</guid><dc:creator><![CDATA[knivil]]></dc:creator><pubDate>Fri, 26 Jun 2009 13:19:47 GMT</pubDate></item><item><title><![CDATA[Reply to C++ Datenbank: dynamische Templates? on Fri, 26 Jun 2009 13:21:29 GMT]]></title><description><![CDATA[<p>Ach das stimmt doch garnicht.<br />
MySQL wurde in C programmiert.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1733321</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1733321</guid><dc:creator><![CDATA[Ad aCTa]]></dc:creator><pubDate>Fri, 26 Jun 2009 13:21:29 GMT</pubDate></item><item><title><![CDATA[Reply to C++ Datenbank: dynamische Templates? on Fri, 26 Jun 2009 13:48:38 GMT]]></title><description><![CDATA[<p>Ad aCTa, ich weiß zwar nicht, wass Dir dieser Asnatz mit dieser &quot;Dynamik&quot; bringt, aber Du kannst es natürlich auch mit pseudo-dynamischer Typisierung machen, wenn Du unbedingt willst. Das Stichwort dazu heißt &quot;type erasure&quot; und findet u.a. bei boost::any und boost::function Anwendung. Du kannst da ja mal nachgucken, wie die das gemacht haben.</p>
<p>Gruß,<br />
SP</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1733345</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1733345</guid><dc:creator><![CDATA[Sebastian Pizer]]></dc:creator><pubDate>Fri, 26 Jun 2009 13:48:38 GMT</pubDate></item><item><title><![CDATA[Reply to C++ Datenbank: dynamische Templates? on Fri, 26 Jun 2009 14:55:42 GMT]]></title><description><![CDATA[<p>Ich bin immer offen für andere Ansätze. Wie gesagt, es muss so dynamisch sein, da der Endanwender möglichst eigene Tabellen mit beliebigen Datentypen und Spaltenanzahl kreieren kann.<br />
Ich habe mir den virtuellen Datentyp-Weg so vorgestellt:</p>
<pre><code class="language-cpp">#include &lt;iostream&gt;
#include &lt;vector&gt;

using namespace std;

class IType { // Speicherklasse

    protected:
        union types { // Potentielle Speichertypen
            int tInteger;
            long tLong;
            float tFloat;
            char tChar;
        };

    public:
        IType() { }
        virtual const int&amp; GetVal() const; // Polymorphe Methode für die Wertrückgabe

};

class MyInteger : public IType { // Typ für Integer

    private:
        types typeTable;

    public:
        MyInteger(int zahl) {
            typeTable.tInteger = zahl; // Wert der union zuweisen
        }

        MyInteger() { }

        const int&amp; GetVal() const {
            return typeTable.tInteger;
        }

};

class MyChar : public IType {   // Typ für Char

    private:
        types typeTable;

    public:
        MyChar(char zeichen) {
            typeTable.tChar = zeichen; // Wert der union zuweisen
        }

        MyChar() { }

        const char&amp; GetVal() const {
            return typeTable.tChar;
        }

};

int main() {

    vector&lt;IType*&gt; vec; // Speichervektor

    MyInteger *inti = new MyInteger(4); // virtueller Int erstellen
    MyChar *chari = new MyChar('a'); // virtueller Char erstellen

    vec.push_back(dynamic_cast&lt;IType*&gt;(inti)); // in Speicherklasse casten
    vec.push_back(dynamic_cast&lt;IType*&gt;(chari)); // und in den Vektor füllen

    MyInteger *testInt = dynamic_cast&lt;MyInteger*&gt;(vec.front()); // auslesen und zurückcasten
    MyChar *testChar = dynamic_cast&lt;MyChar*&gt;(vec.back());

    cout &lt;&lt; testInt-&gt;GetVal() &lt;&lt; endl; // Ausgabe '4'
    cout &lt;&lt; testChar-&gt;GetVal() &lt;&lt; endl; // Ausgabe 'a'

    // aufräumen
    for(vector&lt;IType*&gt;::const_iterator iter = vec.begin(); iter != vec.end(); iter++) {
        delete *iter;
    }
    cin.get();
    return 0;
}
</code></pre>
<p>Aber trotzdem finde ich das unsauber, besonders das protected.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1733372</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1733372</guid><dc:creator><![CDATA[Ad aCTa]]></dc:creator><pubDate>Fri, 26 Jun 2009 14:55:42 GMT</pubDate></item><item><title><![CDATA[Reply to C++ Datenbank: dynamische Templates? on Fri, 26 Jun 2009 16:02:40 GMT]]></title><description><![CDATA[<p>LOOOL DEN CODE KAPIERT JA NIE EINER!!!!!!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1733397</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1733397</guid><dc:creator><![CDATA[Mogggg]]></dc:creator><pubDate>Fri, 26 Jun 2009 16:02:40 GMT</pubDate></item><item><title><![CDATA[Reply to C++ Datenbank: dynamische Templates? on Fri, 26 Jun 2009 16:43:27 GMT]]></title><description><![CDATA[<p>Ich stand schon vor einen ziemlich ähnlichen Problem, mit dem dynamischen Detntypen. Wenn du so etwas ähnliches haben willst, wie den letzter Vorschlag kannst du dir mal Boost.Variant anschauen. Damit hab ich es letztlich gelöst, auch wenn es eine agnz andere Vorgehensweise beim programmieren erfordert hat. Damit bist du aber eigentlich recht flexibel aufgestellt was die Datentypen angeht, da es quasi ein union für alles ist und nicht nur PODs.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1733410</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1733410</guid><dc:creator><![CDATA[Gate]]></dc:creator><pubDate>Fri, 26 Jun 2009 16:43:27 GMT</pubDate></item><item><title><![CDATA[Reply to C++ Datenbank: dynamische Templates? on Fri, 26 Jun 2009 19:52:57 GMT]]></title><description><![CDATA[<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/5255">@Ad</a> aCTa:<br />
Fang mal beim Interface an. Also überleg dir wie das aussehen soll.<br />
Und zwar nicht wie es mit Features die es garnicht gibt aussehen könnte/sollte, sondern ganz konkret, wie es mit dem heutigen C++ Standard aussehen könnte.</p>
<p>Also: wie soll der Client z.B. auf die Daten zugreifen?<br />
Der Return-Typ einer Funktion ist statisch, also kannst du den nicht anhand des Spaltennamens bestimmen.<br />
Also Funktionen ala <code>Get&lt;int&gt;(row_id, &quot;column_name&quot;)</code> ?<br />
Oder doch eher <code>Get(row_id).Get(&quot;column_name&quot;).As&lt;int&gt;()</code> ?<br />
Oder ganz anders?</p>
<p>Und was soll das ganze Ding unterstützen?</p>
<p>Und bist du sicher dass du es als Liste von Spalten speichern willst, und nicht als Liste von Rows?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1733486</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1733486</guid><dc:creator><![CDATA[hustbaer]]></dc:creator><pubDate>Fri, 26 Jun 2009 19:52:57 GMT</pubDate></item><item><title><![CDATA[Reply to C++ Datenbank: dynamische Templates? on Fri, 26 Jun 2009 20:02:26 GMT]]></title><description><![CDATA[<blockquote>
<p>&gt; Also Funktionen ala Get&lt;int&gt;(row_id, &quot;column_name&quot;)?</p>
</blockquote>
<p>Ja, eher so. Nur, dass ich auf diese Weise keine Templates verwenden kann. <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f61e.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--disappointed_face"
      title=":("
      alt="😞"
    /></p>
<blockquote>
<p>&gt; Und was soll das ganze Ding unterstützen?</p>
</blockquote>
<p>Ich habe 4 Komponenten geplant: ein File-Manager, der die Daten auf die Festplatte schreibt und sich darum kümmert, dass die Daten in Komponente 2 richtig aufgenommen werden, denn das ist der binäre Baum mit den Iteratoren, Sortier-Algorithmen usw. Komponente 3 ist ein String-Parser, der so ähnlich wie SQL fungiert, nur viel schlichter. Punkt 4 ist eine ganz kleine Socket-Anbindung, damit das Ding im Ethernet funktioniert.<br />
Datentypen, die speicherbar sind, sind mir erst mal egal, wenn's 3 erst mal sind, ist okay, aber man sollte dann leicht weitere hinzufügen können.</p>
<blockquote>
<p>&gt; Und bist du sicher dass du es als Liste von Spalten speichern willst, und nicht als Liste von Rows?</p>
</blockquote>
<p>Ja, klingt interessant, nur, wie soll ich die Zeigerstruktur da setzten? In meiner &quot;Grafik&quot; einfach vertikal?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1733493</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1733493</guid><dc:creator><![CDATA[Ad aCTa]]></dc:creator><pubDate>Fri, 26 Jun 2009 20:02:26 GMT</pubDate></item></channel></rss>