XPath > XML Wizard > ancestor-or-self

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

  • XPath > XML Wizard > ancestor-or-self

    Hallo,

    ich glaube ich brauche mal die Hilfe eines XML-Wizards. Ich schreibe gerade an einem PHP-Script, welches die bestellung von Newsgruppen ermöglicht. Dafuer habe ich die Newsgruppen mitsamt allen otwendigen Informationen in eine XML-Datei gepackt, die wie folgt aussieht:

    Quellcode

    1. <?xml version='1.0' encoding='ISO-8859-1'?>
    2. <newsgroups>
    3. <newsgroup name="24hoursupport">
    4. <newsgroup name="24hoursupport.helpdesk">
    5. <description></description>
    6. <flag>y</flag>
    7. <fullname>24hoursupport.helpdesk</fullname>
    8. <subscription>unknown</subscription>
    9. </newsgroup>
    10. <subscription>unknown</subscription>
    11. </newsgroup>
    12. <newsgroup name="alt">
    13. <newsgroup name="alt.1d">
    14. <description>No description.</description>
    15. <flag>y</flag>
    16. <fullname>alt.1d</fullname>
    17. <subscription>unknown</subscription>
    18. </newsgroup>
    19. <newsgroup name="alt.3d">
    20. <description>No description.</description>
    21. <flag>y</flag>
    22. <fullname>alt.3d</fullname>
    23. <newsgroup name="alt.3d.studio">
    24. <description>No description.</description>
    25. <flag>y</flag>
    26. <fullname>alt.3d.studio</fullname>
    27. <subscription>unknown</subscription>
    28. </newsgroup>
    29. <subscription>unknown</subscription>
    30. </newsgroup>
    31. ...
    Alles anzeigen


    Mein Wurzelelement ist also "newsgroups" und darunter kommen mehrere verschachtelte "newsgroup"-Eintraege. Initial sind die abbonierbaren Gruppen alle mit einem <subscription>unknown</subscription> versehen.

    Mein programm startet also und liest (mittels PHP5 SimpleXML) die Daten ein. Danach liest es fuer einen einzelnen Beispielfeed die Gruppendaten, welche abboniert werden sollen und setzt in diesem Fall <subscription>TRUE</subscription> (bzw. FALSE bei negierter Auswahl).

    Bis hierher ist alles ganz toll. Nun will ich eine Liste der abbonierten Gruppen ausgeben. Dafuer suche ich mittels XPath nach <subscription>TRUE</subscription> (bzw. FALSE):

    Quellcode

    1. newsgroup[subscription=\"TRUE\" or subscription=\"FALSE\"]


    Das geht auch, nur bekome ich nur genau die Elemente angezeigt, die TRUE bzw. FALSE sind. Da ich aber den Pfad zu diesen Elementen anzeigen wollte, habe ich gedacht, dass geht mittels:

    Quellcode

    1. ancestor-or-self::newsgroup[subscription=\"TRUE\" or subscription=\"FALSE\"]


    Aber nein... leider nicht.

    Weiss jmand, wie ich das machen kann?

    Danke, Code
  • Ich hatte die naive Vorstellung, dass ich mittels der Abfarge, dass ich mit einer Abfrage, nach den TRUE-Werten die ganzen Pfade erhalten. Das wuerde den Programmieraufwand erheblich vereinfachen. Ich dachte eigentlich, dass XPath dieses leisten muesste, aber interessanterweise bekomme ich das nicht hin.

    Wenn ich naemlich die TRUE's auswerte und die Pfade dazu bekomme, kann man ein nettes Formular bauen, welches es ermoeglicht einfach durch den Baum zu laufen und einzelne Newsgruppen an/abzuwaehlen.

    Gruss, Code
  • Hehe, die name-Attribute sind ein kleiner Trick, damit ich die entsprechenden Newsgruppennamen einfacher ausgeben kann. Ich bin halt faul und habe mir erhofft ganz simpel das Formular aufzubauen.

    Allerdings habe ich schon jetzt ein kleines zeitliches Problem mit 20000 Newsgruppen in einem XML-File. Ich glaube ich msus das nochmal ueberdenken.

    Gruss, Code