lu: xPath: Problem beim Filtern mit ancestor-or-self

Beitrag lesen

Hallo alle zusammen,
ich versuche mich gerade in XPath einzuarbeiten, allerdings bin ich auf eins, zwei Probleme gestoßen. Folgende XML-Datei liegt mir vor:

  
<haupt>  
      <zeile>  
        <tag1>  
          <raum>029</raum>  
          <gruppe>CH1</gruppe>  
        </tag1>  
        <tag1>  
          <raum>204</raum>  
          <gruppe>EN1</gruppe>  
        </tag1>  
        <tag1>  
          <raum>139</raum>  
          <gruppe>EN2</gruppe>  
        </tag1>  
        <tag1>  
          <raum>213</raum>  
          <gruppe>GE1</gruppe>  
        </tag1>  
      </zeile>  
      <zeile>  
        <tag1>  
          <raum>029</raum>  
          <gruppe>CH1</gruppe>  
        </tag1>  
        <tag1>  
          <raum>204</raum>  
          <gruppe>EN1</gruppe>  
        </tag1>  
        <tag1>  
          <raum>139</raum>  
          <gruppe>EN2</gruppe>  
        </tag1>  
        <tag1>  
          <raum>213</raum>  
          <gruppe>GE1</gruppe>  
        </tag1>  
        <tag1>  
          <raum>214</raum>  
          <gruppe>GE2</gruppe>  
        </tag1>  
        <tag2>  
          <raum>213</raum>  
          <gruppe>MA2</gruppe>  
        </tag2>  
        <tag2>  
          <raum>029</raum>  
          <gruppe>CH1</gruppe>  
        </tag2>  
      </zeile>  
</haupt>

Mein Ziel ist es diese XML-Datei gezielt nach den gruppen zu filtern, und dann das Array (bspw. für die Gruppe CH1 und EN1) zurückzugeben, sodass am ende nur noch folgendes dasteht (natürlich dann nicht in Form einer XML, sondern in einem Array):

<haupt>  
      <zeile>  
        <tag1>  
          <raum>029</raum>  
          <gruppe>CH1</gruppe>  
        </tag1>  
        <tag1>  
          <raum>204</raum>  
          <gruppe>EN1</gruppe>  
        </tag1>  
      </zeile>  
      <zeile>  
        <tag1>  
          <raum>029</raum>  
          <gruppe>CH1</gruppe>  
        </tag1>  
        <tag1>  
          <raum>204</raum>  
          <gruppe>EN1</gruppe>  
        </tag1>  
        <tag2>  
          <raum>029</raum>  
          <gruppe>CH1</gruppe>  
        </tag2>  
      </zeile>  
</haupt>

dazu hatte ich versucht folgende xpath-Anweisung zu verwenden:

$gefiltert = $xml->xpath("/haupt/zeile/tag1[gruppe='CH1']");

so bekomme ich zunächst nur folgendes Array zurückgeliefert:

	[0] => SimpleXMLElement Object  
		(  
			[raum] => 029  
			[gruppe] => CH1  
		)  
  
	[1] => SimpleXMLElement Object  
		(  
			[raum] => 204  
			[gruppe] => EN1  
		)  
  
	[2] => SimpleXMLElement Object  
		(  
			[raum] => 029  
			[gruppe] => CH1  
		)  
  
	[3] => SimpleXMLElement Object  
		(  
			[raum] => 204  
			[gruppe] => EN1  
		)

soweit sogut, allerdings habe ich ja jetzt nicht mehr den bezug zum tag und der Zeile... eigentlich hatte ich da die [B]ancestor-or-self[/B] Funktion gedacht, allerdings erscheinen dann komischerweise wieder alle Einiträge der XML... woran könnte das liegen? Wo ist mein Fehler? und dritte und letzte Frage: kann ich diese Abfrage noch weiter vereinfachen?

Ich freue mich schon auf eure Antworten. :)

Viele Grüße
lu