2008-10-23 40 views
18

Dưới đây là các mã XML Tôi đang làm việc với:XPath truy vấn với PHP

<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> 

Sau đó, tôi đã viết một mã đơn giản để thực hành làm việc với XPath:

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

    $xpathvar = new Domxpath($xmldoc); 

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

Đó là mã đang làm việc tốt, xuất ra tất cả giá trị của nước chanh như mong đợi. Bây giờ khi tôi thay đổi chuỗi truy vấn để chỉ chọn các yếu tố với một thuộc tính thiết lập một giá trị nhất định, như

// nước chanh [nhà cung cấp = "mẹ"]/giá

hoặc

// nước chanh [id = "1"]/giá

nó sẽ không làm việc, không có đầu ra ở tất cả. Tôi đang làm gì sai?

Trả lời

32

Hãy thử điều này:

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

hoặc

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

Nếu không có "@" nó sẽ tìm kiếm phần tử con với tên đó thay vì các thuộc tính.

6

bạn phải sử dụng ký hiệu @ để biểu thị thuộc tính trong vị từ như sau: //lemonade[@supplier="mother"]/price, đó là tất cả.

7

Điều này chỉ liên quan tiếp tuyến, nhưng khi bạn sử dụng XPath trên tài liệu mà bạn biết cấu trúc, không sử dụng "// tên một số phần tử". Nó rất tốt đẹp cho một ví dụ nhanh, nhưng khi bạn nhấn một tập tin xml lớn với truy vấn đó, đặc biệt nếu nó được theo sau bởi một cái gì đó phức tạp, bạn sẽ nhanh chóng chạy vào các vấn đề hiệu suất.

khoảng không quảng cáo/nước uống/nước chanh [@ supplier = "mother"]/giá

Các vấn đề liên quan