Tôi đã quay lại tất cả các mã cũ của mình và cố gắng tối ưu hóa nó. Một cái gì đó Gần đây tôi tình cờ và đã nhận tôi bối rối đang cố gắng tìm một giải pháp xpath cho việc này:Tìm phần tử cụ thể dựa trên một thuộc tính
function findit($search) {
$i=0;
foreach($xml as $page) { //loop to find specific $element based on $attribute
if($page['src']==$search) { return $i; }
$i++;
}
}
nhu cầu quay trở lại $i
để nó có thể được sử dụng để tham chiếu đến phần tử trong XML sau.
Có vẻ như nó sẽ là có thể, và tôi đã tìm thấy một vài xpath dây mà có vẻ như họ nên làm việc, nhưng không. Chúng thường đề cập đến preceding-children
và đếm chúng thông qua hàm xpath()
, nhưng tôi không thể tìm thấy các nguồn ban đầu nữa và không làm thế nào để dịch nó thành chuỗi xpath PHP.
Điều này có thể thực hiện được không? Hoặc là nó tốt hơn/nhanh hơn/hiệu quả hơn những gì tôi đã có? Gợi ý/Giải pháp?
EDIT: Đối với Tandu của Giải pháp
Ví dụ về XML của tôi tập
<range>
<page src="attribute1" />
<page src="attribute2" />
etc...
<page src="attribut20" />
</range>
Trong chức năng PHP hiện tại, $i
luôn trả 0
nhưng phải trả lại bất cứ vị trí $search
được tìm thấy tại. Đã chỉnh sửa để không còn cần phải chuyển đổi simplexml nữa.
function findit($search) {
$dom=new DOMDocument('1.0');
$dom->load($file);
$xpath=new DOMXPath($dom);
$i=$xpath->evaluate("count(/range/page[@src='$search']/preceding-sibling::*)");
die($dom->saveXML());
}
Been sử dụng SimpleXML quá lâu tôi quên về dom anh trai của mình! – mseancole
* Không nhận ra rằng nhập sẽ thêm nhận xét thay vì chuyển sang dòng kế tiếp XD XML của tôi, tất nhiên, simplexml. Đây là những gì tôi đã có, không chắc chắn nếu cách thanh lịch nhất, nhưng tôi vẫn không thể làm cho nó hoạt động: ( Nhập mã trong bài gốc vì tôi không thể định dạng nó ở đây đúng cách :( – mseancole
@showerhead I xem xml của bạn? Lưu ý rằng "root" và "child" là các tên nút.Ví dụ: nếu bạn có ' ' thay vào đó, bạn sẽ thay thế "gốc" bằng "cha" và "con" bằng "con trai" trong ví dụ của tôi. Tôi thấy bạn đang sử dụng "con" trong ví dụ trong câu hỏi của bạn. –