Jeena Paradies: count() eines Arrays in einem Objektbaum

Hallo,

Ich versuche mich gerade an simplexml aber irgendwas läuft da falsch. Ich möchte per count() nachzählen wie viele <item> es in einer XML Datei gibt. Ich lese die Datei ein und versuche zu zählen, aber count() kommt immer nur auf 1. Hier der Quellcode der PHP Datei:

<?php $portfolio = simplexml_load_file("../webdesign/portfolio.xml"); ?>  
<h2 id="count">Count</h2>  
<p><code>count($portfolio->item);</code> ergibt: <?php echo count($portfolio->item); ?></p>  
<hr />  
<h2>Objektbaum</h2>  
<p><code>print_r($portfolio); gibt das hier aus:</code></p>  
<pre><?php print_r($portfolio); ?></pre>

Und hier ein Link zum Ergebnis: <>http://jeenaparadies.net/t/object.php
[/link]

Warum zählt er da immer 1 und nicht 9?

Grüße
Jeena Paradies

  1. Hallo,

    Ok dank dedlfix aus dem Chat habe ich nun diese Lösung: count($portfolio->xpath('item')); und jetzt mache ich mcih auf die Suche um zu verstehen was das mit dem overloading an dieser Stelle auf sich hat.

    Jeena Paradies

    Grüße
    Jeena Paradies

    1. echo $begrüßung;

      Ich ergänze mal noch etwas, damit man das richtig nachvollziehen kann.

      Gegeben war ein XML-Dokument mit einem Root-Element <portfolio> mit mehreren <item> als Kinder.

      print_r($portfolio) zeigte $portfolio->item als ein Array mit 9 Elementen an. count($portfolio->item) lieferte jedoch seltsamerweise 1. Ein print_r($portfolio->item) ergab, dass $portfolio->item einfach das erste item-Element lieferte. Erst mit $portfolio->xpath('item') konnte man auf das gesamte Array mit den 9 item-Elementen zugreifen.

      Das erwähnte Overloading wird hier beim Zugriff auf $portfolio->item im SimpleXMLElement-Objekt zur Anwendung kommen.

      echo "$verabschiedung $name";

  2. Moin!

    Ich versuche mich gerade an simplexml aber irgendwas läuft da falsch. Ich möchte per count() nachzählen wie viele <item> es in einer XML Datei gibt. Ich lese die Datei ein und versuche zu zählen, aber count() kommt immer nur auf 1. Hier der Quellcode der PHP Datei:

    Mal was ganz anderes: Da ich in meinem User-CSS die Code-Blöcke nicht inline, sondern als Block anzeigen lasse (schön mit Rahmen und Überschrift versehen, und mit begrenzter Höhe scrollbar), zerstört dein inline ausgezeichneter Code mir deinen Text ziemlich extrem. Da ich darüber hinaus kaum glaube, dass es in irgendeiner Weise sinnvoll ist, wenn man mitten im Fließtext PHP- und XML-Code highlighten läßt (der Effekt dürfte selbst in der Standardansicht kaum wahrnehmbar sein), möchte ich anregen, auf das Auszeichnen von Code-Fitzeln zu verzichten und sich auf komplette Code-Blöcke zu beschränken.

    Und hier ein Link zum Ergebnis: <>http://jeenaparadies.net/t/object.php
    [/link]

    Was'n das für ein Link? ;)

    - Sven Rautenberg

    --
    My sssignature, my preciousssss!
    1. Hi,

      Mal was ganz anderes: Da ich in meinem User-CSS die Code-Blöcke nicht inline, sondern als Block anzeigen lasse

      dito.

      Da ich darüber hinaus kaum glaube, dass es in irgendeiner Weise sinnvoll ist, wenn man mitten im Fließtext PHP- und XML-Code highlighten läßt (der Effekt dürfte selbst in der Standardansicht kaum wahrnehmbar sein), möchte ich anregen, auf das Auszeichnen von Code-Fitzeln zu verzichten und sich auf komplette Code-Blöcke zu beschränken.

      Ich unterstütze den Antrag ;-)

      cu,
      Andreas

      --
      Warum nennt sich Andreas hier MudGuard?
      Schreinerei Waechter
      Fachfragen per E-Mail halte ich für unverschämt und werde entsprechende E-Mails nicht beantworten. Für Fachfragen ist das Forum da.
      1. Hallo MudGuard.

        Ich unterstütze den Antrag ;-)

        Ebenfalls.

        Einen schönen Sonntag noch.

        Gruß, Ash*feel free*ura

        --
        Selfcode: sh:( fo:} ch:? rl:( br: n4:~ ie:{ mo:| va:) de:> zu:) fl:( ss:) ls:[ js:|
        30 Days to becoming an Opera8 Lover -- Fix dsl sbc yahoo com with User JavaScript
        Meine Browser: Opera 8.50 | Firefox 1.0.7 | Lynx 2.8.5 | Netscape 4.7 | IE 6.0
        Use OpenOffice.org
    2. Hallo,

      Mal was ganz anderes: Da ich in meinem User-CSS die Code-Blöcke nicht inline, sondern als Block anzeigen lasse (schön mit Rahmen und Überschrift versehen, und mit begrenzter Höhe scrollbar), zerstört dein inline ausgezeichneter Code mir deinen Text ziemlich extrem. Da ich darüber hinaus kaum glaube, dass es in irgendeiner Weise sinnvoll ist, wenn man mitten im Fließtext PHP- und XML-Code highlighten läßt (der Effekt dürfte selbst in der Standardansicht kaum wahrnehmbar sein), möchte ich anregen, auf das Auszeichnen von Code-Fitzeln zu verzichten und sich auf komplette Code-Blöcke zu beschränken.

      Ich kann das einerseite nachvollziehen, andererseits denke ich dass du da nicht ganz recht hast. 1. [code] wird in <code> umgewandelt, welches ja bekanntlich ein inlineelement ist, genau so wie <>, da könnte ja dann jeder kommen und sagen: bitte keine Links mehr in Fließtext machen, da mir das sonst mein user.css zerschießt.

      Das Element <code> ist ja nicht umsonst ein Inlineelement und wird auch draußen in der richtigen Welt als Inlineelement verwendet. Warum? Damit das lesen einfacher fällt. Alles was mit <code> ausgezeichnet ist wird meist mit einer Schrift mit einer festen Breite angezeigt (so wie auch bei mir hier im Forum).

      Als Fazit kann man sagen: Die Benutzer dieses Forums können nichts dafür, dass du dein CSS für etwas misbrauchst wofür es nicht gedacht ist. Du hast das so gewollt ;-) also musst du mit den Folgen leben :-). Oder du schreibst den Entwickler an und bittest ihn darum eine Unterscheidung zwischen Code-Blöcken und inline-code einzubauen (wobei du das auch selbst schreiben kannst und den Forenbetreibern zur Prüfung und eventuellem Einbau vorlegen kannst).

      Ich werde versuchen das im Fließtext nicht mehr einzusetzen, auch wenn ich das dort trotzdem für sehr sinnvoll halte, aber ob ich mich jedes mal daran erinnern kann, mag ich nicht versprechen.

      Grüße
      Jeena Paradies

      1. Moin!

        Ich kann das einerseite nachvollziehen, andererseits denke ich dass du da nicht ganz recht hast. 1. [code] wird in <code> umgewandelt, welches ja bekanntlich ein inlineelement ist, genau so wie <>, da könnte ja dann jeder kommen und sagen: bitte keine Links mehr in Fließtext machen, da mir das sonst mein user.css zerschießt.

        Du zeichnest den Code ja aber nicht mit <code> aus, sondern mit [code], und [code] ist weder inline- noch block-Element, sondern gar kein HTML. Dass das Forum aus semantischen Gründen <code> daraus macht - fein. Es könnte auch <div class="code"> draus machen, oder aber <span class="code">.

        Die dahinterliegende Semantik interessiert mich allerdings herzlich wenig, mich interessiert das Aussehen des Forums. Und da stelle ich zuerst mal die Sinnfrage: Braucht man innerhalb des Fließtextes eine garnicht oder nur sehr dezent sichtbare Hervorhebung von "Code". Welchen Wahrnehmungsvorteil hat es, wenn bei getElementByID() die Klammern farbig hervorgehoben wären, oder ein <code> andersfarbig im Text steht?

        Mit meinem User-CSS habe ich nach einigem Abwarten, Experimentieren und der seitdem bestehenden Nutzung eine für mich und 99,9% der Anwendungsfälle optimales Ergebnis erzielt: Codeblöcke sind schön umrahmt, die vom Autor beabsichtigte Sprache in lang= wird mir angezeigt, und lange Codeblöcke sind scrollbar, so dass ich nicht ewig scrollen muß, um wieder beim Text anzugelangen.

        Das funktioniert solange sehr gut, solange alle Nutzer dieses Features tatsächlich nur abgeschlossene Blöcke mit [code] auszeichnen. Du als bislang einziger Nutzer fängst jetzt an, auch einzelne Worte damit auszuzeichnen und stört mir (und offenbar auch zwei anderen Nutzern) damit ein Feature, das bislang sehr gut funktioniert hat. Und deshalb bitte ich darum, bei der Auszeichnung von Sondertextbereichen im Text zurückhaltend vorzugehen. Ist für dich doch schließlich auch weniger Aufwand.

        Das Element <code> ist ja nicht umsonst ein Inlineelement und wird auch draußen in der richtigen Welt als Inlineelement verwendet. Warum? Damit das lesen einfacher fällt. Alles was mit <code> ausgezeichnet ist wird meist mit einer Schrift mit einer festen Breite angezeigt (so wie auch bei mir hier im Forum).

        Das Schriftargument zieht nicht, weil ausnahmslos ALLER Text des Postings in monospace-Schrift angezeigt wird. :)

        Und diese Diskussion könnte man auch ganz einfach dadurch beheben, dass code { display:block} in das allgemeine Forums-Stylesheet kommt, oder style="display:block" in das <code>-Tag. :)

        Als Fazit kann man sagen: Die Benutzer dieses Forums können nichts dafür, dass du dein CSS für etwas misbrauchst wofür es nicht gedacht ist.

        Mit der Verfügbarkeit von User-CSS ist natürlich immer die Gefahr gegeben, dass man sich Dinge ausdenkt, die nicht kompatibel mit den normalen Nutzungsgewohnheiten anderer Teilnehmer sind.

        Die Statistik spricht da allerdings doch etwas für mich: :) Du bist bislang der einzige, der [code] im Fließtext anwendet. Und einer ist eben viel leichter davon abzuhalten, als ein ganzes Forum.

        - Sven Rautenberg

        --
        My sssignature, my preciousssss!
        1. 你好 Sven,

          Du zeichnest den Code ja aber nicht mit <code> aus, sondern mit [code],
          und [code] ist weder inline- noch block-Element, sondern gar kein HTML.

          Tut mir leid, Sven, aber [code] ist hier im CForum die proprietäre Syntax
          für <code>. Damit ist das semantische auszeichnen von Code möglich;
          Syntax-Highlighting ist nur eine nette Dreingabe. Es ging mir dabei
          hauptsächlich darum, dass Code korrekt ausgezeichnet wird, erst in zweiter
          Linie um die Hervorhebungen. Deshalb ist es ja auch möglich, [code]-Blöcke
          ohne Sprache zu erzeugen.

          Und da stelle ich zuerst mal die Sinnfrage: Braucht man innerhalb des
          Fließtextes eine garnicht oder nur sehr dezent sichtbare Hervorhebung
          von "Code". Welchen Wahrnehmungsvorteil hat es, wenn bei getElementByID()
          die Klammern farbig hervorgehoben wären, oder ein <code> andersfarbig im
          Text steht?

          Das ist nicht der Sinn von [code]. Der Sinn von [code] ist die semantische
          Auszeichnen von Source-Code.

          Das funktioniert solange sehr gut, solange alle Nutzer dieses Features
          tatsächlich nur abgeschlossene Blöcke mit [code] auszeichnen. Du als
          bislang einziger Nutzer fängst jetzt an, auch einzelne Worte damit
          auszuzeichnen und stört mir (und offenbar auch zwei anderen Nutzern)
          damit ein Feature, das bislang sehr gut funktioniert hat.

          Das haben verschiedenste Leute bereits mehrfach gemacht, Sven – unter
          anderem auch Tim und ich.

          Die Statistik spricht da allerdings doch etwas für mich: :) Du bist
          bislang der einzige, der [code] im Fließtext anwendet.

          Das ist falsch. Es ist bereits von mehreren Usern gemacht worden, und nicht
          nur einmal.

          再见,
           克里斯蒂安

          --
          Toilettenspruch II. | Toilettenspruch I.
          Wenn gewöhnliche Menschen Wissen erlangen, sind sie weise. Wenn Weise Einsicht erlangen, sind sie gewöhlnliche Menschen.
          http://wwwtech.de/
          1. Hallo Christian,

            Das funktioniert solange sehr gut, solange alle Nutzer dieses Features
            tatsächlich nur abgeschlossene Blöcke mit [code] auszeichnen. Du als
            bislang einziger Nutzer fängst jetzt an, auch einzelne Worte damit
            auszuzeichnen und stört mir (und offenbar auch zwei anderen Nutzern)
            damit ein Feature, das bislang sehr gut funktioniert hat.

            Das haben verschiedenste Leute bereits mehrfach gemacht, Sven – unter
            anderem auch Tim und ich.

            Du kannst mich auch dazu zählen ;-)

            Schöne Grüße,

            Johannes

            --
            ie:% fl:( br:< va:) ls:[ fo:) rl:) n4:& ss:| de:] js:| ch:} sh:) mo:} zu:)
        2. Hallo,

          Du zeichnest den Code ja aber nicht mit <code> aus, sondern mit [code], und [code] ist weder inline- noch block-Element, sondern gar kein HTML. Dass das Forum aus semantischen Gründen <code> daraus macht - fein. Es könnte auch <div class="code"> draus machen, oder aber <span class="code">.

          Es könnte, tut es aber nicht und das ist der Punkt. Das Forum könnte auch <> als <blockquote> auszeichnen, tut es aber auch nicht aus einem ganz bestimmten Grund, den du auch sicherlich nachvollziehen kannst.

          Die dahinterliegende Semantik interessiert mich allerdings herzlich wenig, mich interessiert das Aussehen des Forums.

          Mich auch.

          Und da stelle ich zuerst mal die Sinnfrage: Braucht man innerhalb des Fließtextes eine garnicht oder nur sehr dezent sichtbare Hervorhebung von "Code". Welchen Wahrnehmungsvorteil hat es, wenn bei getElementByID() die Klammern farbig hervorgehoben wären, oder ein <code> andersfarbig im Text steht?

          Die Farben sind nicht das wichtigste, sondern erst mal die Schriftart, aber die Farben sind auch nett.

          Mit meinem User-CSS habe ich nach einigem Abwarten, Experimentieren und der seitdem bestehenden Nutzung eine für mich und 99,9% der Anwendungsfälle optimales Ergebnis erzielt:

          Für dich ja, aber 99,9%? Nein absolut nicht, vielleicht 60%.

          Codeblöcke sind schön umrahmt, die vom Autor beabsichtigte Sprache in lang= wird mir angezeigt, und lange Codeblöcke sind scrollbar, so dass ich nicht ewig scrollen muß, um wieder beim Text anzugelangen.

          Das ist für _dich_ sicherlich sehr schön, aber nicht jeder möchte das so haben. Im default Stylesheet ist das ja auch nicht so.

          Das funktioniert solange sehr gut, solange alle Nutzer dieses Features tatsächlich nur abgeschlossene Blöcke mit [code] auszeichnen.

          Kann ich nachvollziehen, auch wenn das nicht der Sinn der Sache ist.

          Du als bislang einziger Nutzer fängst jetzt an

          1. nicht als einziger Nutzer.
          2. nicht "fängst jetzt an"

          Ich habe mir das auch gar nicht selbst ausgedacht sondern damals als das Feature eingeführt wurde von Christian Seiler abgeschaut und da mir das sehr sinnvoll erschien und das Lesen vereinfachte habe ich das für mich übernommen, aber damals schon, nicht erst jetzt. Ich habe auch schon sehr viele andere gesehen, die das so machen.

          auch einzelne Worte damit auszuzeichnen und stört mir (und offenbar auch zwei anderen Nutzern) damit ein Feature, das bislang sehr gut funktioniert hat.

          Nur weil ihr den Sinn des Features falsch verstanden habt mache ich doch nicht irgendetwas falsch, oder doch?

          Und deshalb bitte ich darum, bei der Auszeichnung von Sondertextbereichen im Text zurückhaltend vorzugehen. Ist für dich doch schließlich auch weniger Aufwand.

          Weniger Aufwand hätte ich, wenn ich hier gar nicht posten würde :-).

          Das Schriftargument zieht nicht, weil ausnahmslos ALLER Text des Postings in monospace-Schrift angezeigt wird. :)

          Wer sagt denn dass hier ALLER Text des Postings in monospace-Schrift angezeigt wird??? Bei deinem user.css vielleicht und eventuell auch beim default Stylesheet, aber doch bei mir nicht, wie kommst du denn auf diese verrückte Idee?

          Und diese Diskussion könnte man auch ganz einfach dadurch beheben, dass code { display:block} in das allgemeine Forums-Stylesheet kommt, oder style="display:block" in das <code>-Tag. :)

          Warum würde man ein inline Element also Block anzeigen lassen wollen? Das ist ja wohl wirklich kein Argument, dann könnte man in das allgemeine Forums-Stylesheet auch a { display: block; } oder textarea { display: none; } reinschreiben das wäre genau so sinnvoll. Aus welchem Grund meinst du schlägt das W3C den Browserherstellern inline elemente auch als inline anzuzeigen? Und warum meinst du halten sich dann auch noch ausnahmslos _alle_ Browserhersteller daran?

          Die Statistik spricht da allerdings doch etwas für mich: :) Du bist bislang der einzige, der [code] im Fließtext anwendet. Und einer ist eben viel leichter davon abzuhalten, als ein ganzes Forum.

          Glaube nie einer Statistik die du nicht selbst gefälscht hast.

          Grüße
          Jeena Paradies

    3. 你好 Sven,

      Mal was ganz anderes: Da ich in meinem User-CSS die Code-Blöcke nicht
      inline, sondern als Block anzeigen lasse […]

      … machst du einen Fehler. Richtig. Denn <code> ist ein Inline-Element, auch
      richtig. Danke, wir sind uns einig ;)

      Mal abgesehen davon finde ich es schon seltsam, dass vom Forum-Nutzer
      gefordert wird, sich nach der User-CSS eines anderen Forum-Nutzers zu
      richten. Dann fordere ich demnächst, dass alle Foren-Nutzer nur mit 80
      Zeichen Breite schreiben…

      再见,
       克里斯蒂安

      --
      Toilettenspruch II. | Toilettenspruch I.
      <Henryk> Those who didn't understand (email,usenenet,...) are doomed to reinvent ist. Poorly.
      http://wwwtech.de/
    4. Hallo Sven,

      Mal was ganz anderes: Da ich in meinem User-CSS die Code-Blöcke nicht inline, sondern als Block anzeigen lasse (schön mit Rahmen und Überschrift versehen, und mit begrenzter Höhe scrollbar), zerstört dein inline ausgezeichneter Code mir deinen Text ziemlich extrem.

      Ich kann ja nachvollziehen, dass dich das bei deinen Einstellungen nervt, aber das ist dann dein persönliches Problem. Wenn du mit einem Benutzerstylesheet die Darstellung des Forums bei dir veränderst, kannst du nicht wirklich verlangen, dass sich die Leute in Zukunft beim Verfassen ihrer Postings danach richten. Ich finde dein Ansinnen etwas unverschämt.

      Sorry,

      Johannes

      --
      ie:% fl:( br:< va:) ls:[ fo:) rl:) n4:& ss:| de:] js:| ch:} sh:) mo:} zu:)