2011-04-04 14 views
17

संभावित डुप्लिकेट का चयन:
PHP SimpleXML. How to get the last item?
XSLT Select all nodes containing a specific substringपीएचपी XPath पिछले मिलान तत्व

मैं 'myClass' के एक वर्ग के साथ पिछले अवधि तत्व की सामग्री खोजने की जरूरत है। मैंने विभिन्न संयोजनों की कोशिश की है लेकिन जवाब नहीं मिल रहा है।

//span[@class='myPrice' and position()=last()] 

इस वर्ग 'myClass' के साथ सभी तत्वों को देता है, मेरा अनुमान है कि इस वजह से प्रत्येक पाया तत्व संसाधन के समय पिछले है - लेकिन मैं सिर्फ वास्तविक पिछले मिलान तत्व की जरूरत है।

+0

इनपुट xml कृपया – Gordon

+0

@fabrik: मुझे नहीं लगता। यह अधिक उचित होगा: http://stackoverflow.com/questions/4672997/xslt-select-all-nodes-containing-a- विशिष्ट- substring। यह अंतिम नहीं है लेकिन पहले और इसमें 'php' टैग नहीं है ... –

उत्तर

40

आपको प्रोसेसर के लिए चिह्नित करना होगा कि आप मौजूदा सेट के रूप में //span[@class='myPrice'] का इलाज करना चाहते हैं और फिर उस सेट पर predicate स्थिति() = last() लागू करें।

(//span[@class='myPrice'])[last()] 

उदा।

<?php 
$doc = getDoc(); 
$xpath = new DOMXPath($doc); 
foreach($xpath->query("(//span[@class='myPrice'])[last()]") as $n) { 
    echo $n->nodeValue, "\n"; 
} 


function getDoc() { 
    $doc = new DOMDOcument; 
    $doc->loadxml(<<< eox 
<foo> 
    <span class="myPrice">1</span> 
    <span class="yourPrice">0</span> 
    <bar> 
    <span class="myPrice">4</span> 
    <span class="yourPrice">99</span> 
    </bar> 
    <bar> 
    <span class="myPrice">9</span> 
    </bar> 
</foo> 
eox 
); 
    return $doc; 
} 
+0

मैं अंतिम पंक्ति को कैसे बाहर निकालूं? असल में मैं परिणामस्वरूप दो पंक्तियों को बाहर करना चाहता हूं। क्या यह एक 'xpath' अभिव्यक्ति के साथ संभव है? –

7

अभिव्यक्ति आप साधन का इस्तेमाल किया "का चयन हर स्पान तत्व को प्रदान की है कि (क) यह @class='myprice' है, और (ख) वह अपने माता-पिता के अंतिम बच्चा है वहाँ दो त्रुटियाँ हैं:।

(1) आप @class के आधार पर फ़िल्टर करने के बजाय सभी स्पान तत्व करने के लिए इसे लागू करने के बाद फिल्टर [position()=last()] लागू करने के लिए

(2) प्रपत्र //span[last()] की अभिव्यक्ति का मतलब है /descendant-or-self::*/(child::span[last()]) जो हर तत्व के अंतिम बच्चे काल चयन करता है। आप की जरूरत की जरूरत है प्राथमिकता बदलने के लिए कोष्ठक का उपयोग करें: (//span)[last()]

तो वोल्करके द्वारा दी गई अभिव्यक्ति (//span[@class='myPrice'])[last()] बन जाती है।

संबंधित मुद्दे