PHP ile XPath sorgusu

3 Cevap php

İşte ben çalışıyorum XML kodu:

<inventory>
        <drink>
                <lemonade supplier="mother" id="1">
                        <price>$2.50</price>
                        <amount>20</amount>
                </lemonade>
                <lemonade supplier="mike" id="4">
                        <price>$3.00</price>
                        <amount>20</amount>
                </lemonade>
                <pop supplier="store" id="2">
                        <price>$1.50</price>
                        <amount>10</amount>
                </pop>
        </drink>
</inventory>

Sonra ben XPath ile çalışan uygulama için basit bir kod yazdı:

<?php
        $xmldoc = new DOMDocument();
        $xmldoc->load('sample.xml');

        $xpathvar = new Domxpath($xmldoc);

        $queryResult = $xpathvar->query('//lemonade/price');
        foreach($queryResult as $result){
                echo $result->textContent;
        }
?>

Bu kod beklendiği gibi tüm limonata fiyat değerleri çıktısı, iyi çalışıyor. Şimdi ben gibi belirli bir değere ayarlanmış bir özelliği ile sadece öğeleri seçmek için sorgu dizesi değiştirdiğinizde

/ / Limonata [satıcılar = "anne"] / fiyat

veya

/ / Limonata [id = "1"] / fiyat

o, hiç çıkış çalışmaz. Ben yanlış ne yapıyorum?

3 Cevap

Bu deneyin:

//lemonade[@id="1"]/price

veya

//lemonade[@supplier="mother"]/price

Without the "@" it looks fveyachild elements with that name instead of attributes.

Bu sadece yüzeysel ilişkili olduğunu, ama sen yapısını bilmek hangi bir belge üzerinde XPath kullandığınızda, don't "/ / bazı element adı" kullanın. Bu hızlı bir örnek için çok güzel, ama karmaşık bir şey tarafından takip özellikle eğer sorgu ile büyük bir xml dosyası vurduğunda, hızlı performans sorunları çalıştırmak olacaktır.

envanter / içecek / limonata [@ tedarikçisi = "anne"] / fiyat

//lemonade[@supplier="mother"]/price, hepsi bu: Bunu gibi yüklemi içinde niteliğini belirtmek için @ işaretini kullanmak zorunda.