2011-12-05 12 views
2

XMLファイルに「プロデューサ」が入っています。ここでPHPでXMLコンテンツを検索して表示する

は、ファイルがどのように見えるかのサンプルです:

<producer> 
    <name>John Doe's Fish Emporium!</name> 
    <owner>John Doe</owner> 
    <address> 
     <civic>123</civic> 
     <mailing>Example Drive</mailing> 
     <town>Halifax</town> 
     <province>Nova Scotia</province> 
     <postal>A1B 2C3</postal> 
     <phone>902-123-4567</phone> 
     <fax>902-098-7654</fax> 
     <email>[email protected]</email> 
     <website>www.example.com</website> 
    </address> 
    <products> 
     <product>Pollock (Saithe)</product> 
     <product>Flounder/Sole</product> 
     <product>Salmon, Farm Raised</product> 
     <product>Mussels, Blue</product> 
    </products> 
    <exports> 
     <region>Europe</region> 
     <region>North America</region> 
     <region>Pacific Rim</region> 
     <region>United States</region> 
    </exports> 
</producer> 

ユーザーは全体のプロデューサーをプリントアウトし、その後、そのキーワードのためのXMLドキュメントを検索するHTMLフォーム、に値を入力します。たとえば、ユーザがSalmon製品を検索する場合、検索は上記のプロデューサ全体を吐き出します。私はXML文書のどこにいるのかを検出し、プロデューサ全体をエコーアウトする方法はありますか?

ありがとうございます!

答えて

2

あなたのプロデューサ要素がプロデューサルートノードの直接の子であると仮定しています。

/producers/producer[descendant::*[contains(text(), "Salmon")]] 

これは、いずれかの子テキストノードに「サーモン」というテキストを持つすべてのプロデューサ要素を検出します。このXPathでは、すべての子ノードを検索できます。地域、町、製品など - レベルにかかわらず。

定型記号はImplementing condition in XPathを参照してください。

+0

ありがとう!私はこれを使用します。 – jasonaburton

0

これはすでに何度も答えられています。右の関連リンクをご覧ください。ここではあなたが必要としているものです:

simplexml

DOM

XPath

+0

私は現在SimpleXMLを使用していますが、要素の親タグにはアクセスできません。 – jasonaburton

+1

これはおそらくコメントだったと元の質問 –

+0

私は私の編集で言ったように、xpathしようとしている必要がありますこれは何度も答えられている、私は参照してあなたの質問に答えたのでdownvoteしなかった場合、簡単に見つけることができる回答を提供することができます。 – mseancole

0

これかもしれないが参考に: -

$obj = simplexml_load_string(...); 
$expr = "/producer/products/product[contains(text(),'salmon')]/../.."; 
$found = $obj->xpath($expr); 

は、楽しんで楽しんでください!

+0

ニース、ありがとう! :) – jasonaburton

関連する問題