[英]PHP SimpleXML XPath get next parent node
我以前從來沒有在這里問過一個問題所以請原諒我的問題,如果它的格式很糟糕或不夠具體。 我只是一個討厭的人,對PHP和XPath知之甚少。
我有一個像這樣的XML文件:
<catalogue>
<item>
<reference>A1</reference>
<title>My title1</title>
</item>
<item>
<reference>A2</reference>
<title>My title2</title>
</item>
</catalogue>
我使用SimpleXML拉這個文件:
$file = "products.xml";
$xml = simplexml_load_file($file) or die ("Unable to load XML file!");
然后我使用URL參數的引用來獲取有關使用PHP的'item'的額外細節:
foreach ($xml->item as $item) {
if ($item->reference == $_GET['reference']) {
echo '<p>' . $item->title . '</p>';
}
所以來自www.mysite.com/file.php?reference=A1這樣的網址
我會得到這個HTML:
<p>My title1</p>
我意識到我可能沒有做到這一點,任何改進這一點的指示都是受歡迎的。
我的問題是,我想找到下一個和之前的'項目'細節。 如果我從URL知道引用= A1,我如何找到下一個“項目”的引用,標題等? 如果我只有'A1'並且我知道這是一個參考節點,我該如何得到這樣的HTML:
<p>Next item is My title2</p>
我讀過關於兄弟姐妹但我不知道如何使用它。 我只能找到參考節點的以下兄弟,這不是我需要的。
任何幫助贊賞。
你可以使用:
/catalogue/item[reference='A1']/following-sibling::item[1]/title
含義: 從catalogue
根元素的item
元素子元素,具有帶有'A1'字符串值的reference
元素,navegate到第一個跟隨sibling item
元素的title
子元素。
我可能會使用xpath來獲取下一個/上一個(和當前)節點。
<?php
error_reporting(E_ALL ^ E_NOTICE);
$s = '
<catalogue>
<item>
<reference>A1</reference>
<title>My title1</title>
</item>
<item>
<reference>A2</reference>
<title>My title2</title>
</item>
<item>
<reference>A3</reference>
<title>My title3</title>
</item>
</catalogue>
';
$xml = simplexml_load_string($s);
$reference = 'A3';
list($current) = $xml->xpath('/catalogue/item[reference="' . $reference . '"]');
if($current) {
print 'current: ' . $current->title . '<br />';
list($prev) = $current->xpath('preceding-sibling::*[1]');
if($prev) {
print 'prev: ' . $prev->title . '<br />';
}
list($next) = $current->xpath('following-sibling::*[1]');
if($next) {
print 'next: ' . $next->title . '<br />';
}
}
請參閱SimpleXMLElement::xpath
和XPath語法文檔的文檔。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.