XPath - Prädikatenproblem?

flashray

Erfahrenes Mitglied
Hallo,

XML:
Code:
<?xml version="1.0" encoding="UTF-8"?> 
<wetter> 
    <tag datum="1.5.2006"> 
        <stadt name="Berlin"> 
            <messung uhrzeit="10"> 
                <temp>22</temp> 
                <wetterlage>sonnig</wetterlage> 
                <anmerkung>Es ziehen Wolken auf.</anmerkung> 
            </messung> 
            <messung uhrzeit="14"> 
                <temp>27</temp> 
            </messung> 
        </stadt> 
        <stadt name="Hamburg"> 
            <messung uhrzeit="10"> 
                <temp>20</temp> 
                <wetterlage>regnerisch</wetterlage> 
            </messung> 
        </stadt> 
    </tag> 
</wetter>

XPath:
Code:
/wetter/tag/stadt[//temp>21]

Ausgabe:
Code:
<stadt name="Berlin"> 
            <messung uhrzeit="10"> 
                <temp>22</temp> 
                <wetterlage>sonnig</wetterlage> 
                <anmerkung>Es ziehen Wolken auf.</anmerkung> 
            </messung> 
            <messung uhrzeit="14"> 
                <temp>27</temp> 
            </messung> 
        </stadt>
<stadt name="Hamburg"> 
            <messung uhrzeit="10"> 
                <temp>20</temp> 
                <wetterlage>regnerisch</wetterlage> 
            </messung> 
        </stadt>

Ich hätte hier erwartet das Hamburg nicht in der Ergebnismenge ist. Kann mir jemand erklären warum das trotzdem der Fall ist. Ebenso ist mir unklar warum das größer-Zeichen hier überhaupt funktioniert, da der Inhalt von temp ein String und keine Zahl ist.

So funktioniert es, warum aber nicht der obige.
Code:
/wetter/tag/stadt[messung/temp>21]

Code:
<stadt name="Berlin"> 
            <messung uhrzeit="10"> 
                <temp>22</temp> 
                <wetterlage>sonnig</wetterlage> 
                <anmerkung>Es ziehen Wolken auf.</anmerkung> 
            </messung> 
            <messung uhrzeit="14"> 
                <temp>27</temp> 
            </messung> 
        </stadt>

Vg Erdal
 
Hi.
Code:
/wetter/tag/stadt[//temp>21]

Ich hätte hier erwartet das Hamburg nicht in der Ergebnismenge ist. Kann mir jemand erklären warum das trotzdem der Fall ist.
Die Bedingung wird zu "wahr" evaluieren sowie im gesamten Dokument mindestens ein Element namens temp enthalten ist dessen Wert > 21 ist.
Ebenso ist mir unklar warum das größer-Zeichen hier überhaupt funktioniert, da der Inhalt von temp ein String und keine Zahl ist.
Laut XPath Standard wird ein String automatisch konvertiert (als ob die Funktion number() angewendet worden wäre) wenn ein Operand eine Zahl ist. Genauso wird für jedes Element eines node-sets diese Konvertierung durchgeführt wenn der andere Operand eine Zahl ist.
So funktioniert es, warum aber nicht der obige.
Code:
/wetter/tag/stadt[messung/temp>21]
Der Selektor // sucht ausgehend von der Dokument-Wurzel nach dem Element "temp" während "messung/temp" sich hier wirklich nur auf den Kontext-Knoten bezieht.

Probier's mal so:
Code:
/wetter/tag/stadt[.//temp > 21]

Gruß
 

Neue Beiträge

Zurück