3

私はこれまでここで質問をしたことがないので、フォーマットが正しくないか、十分に具体的でない場合は、私の質問を許してください。私はほんの少しの人で、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を使用した「アイテム」に関する追加の詳細を取得しています。

foreach ($xml->item as $item) {
if ($item->reference == $_GET['reference']) {
 echo '<p>' . $item->title . '</p>';
}

したがって、www.mysite.com / file.php?reference=A1のようなURLから

私はこのHTMLを取得します:

<p>My title1</p>

私はこれを正しく行っていない可能性があることを認識しており、これを改善するための指針を歓迎します。

私の質問は、次と前の「アイテム」の詳細を見つけたいということです。URLからreference=A1であることがわかっている場合、次の「アイテム」の参照、タイトルなどを見つけるにはどうすればよいですか?'A1'しかなく、それが参照ノードであることがわかっている場合、次のようなHTMLを取得するにはどうすればよいですか。

<p>Next item is My title2</p>

次の兄弟について読んだことがありますが、使い方がわかりません。参照ノードの次の兄弟しか見つかりません。これは必要なものではありません。

助けていただければ幸いです。

4

2 に答える 2

3

あなたが使用することができます:

/catalogue/item[reference='A1']/following-sibling::item[1]/title

意味: 'A1' 文字列値を持つ要素を持つルート要素の子要素から、最初に続く兄弟要素の子に移動します。itemcataloguereferenceitemtitle

于 2010-09-02T12:48:00.500 に答える
2

おそらく 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 構文のドキュメントを参照してください。

于 2010-09-02T12:49:17.200 に答える