2012-01-31 12 views
1

xpathを使用して、次のXMLの特定の電子メールアドレスを照会しようとしています。php xpath照合値のxml照合値

<?xml version="1.0"?> 
<records> 
     <record> 
      <f id="6">sample data 1</f> 
      <f id="7">user full name 1</f> 
      <f id="8">first name 1</f> 
      <f id="9">phone number 1</f> 
      <f id="10">[email protected]</f> 
      <f id="11">user1 last name</f> 
      <f id="12">url 1</f> 
     </record> 
     <record> 
      <f id="6">sample data 2</f> 
      <f id="7">user full name 2</f> 
      <f id="8">first name 2</f> 
      <f id="9">phone number 2</f> 
      <f id="10">[email protected]</f> 
      <f id="11">user2 last name</f> 
      <f id="12">url 2</f> 
     </record> 
     <record> 
      <f id="6">sample data 3</f> 
      <f id="7">user full name 3</f> 
      <f id="8">first name 3</f> 
      <f id="9">phone number 3</f> 
      <f id="10">[email protected]</f> 
      <f id="11">user3 last name</f> 
      <f id="12">url 3</f> 
     </record> 
     </records> 

私はPHPを使用していますが、これまでにすべてのメールアドレスを次の行で照会することができます。

$result = $xml->xpath('/records/record/f[@id="10"]'); 

ただし、特定のメールアドレス(たとえば、メールアドレス)を照会できるようにします。 "[email protected]"これはxpathで1行ですべて行えますか?

また、その電子メールアドレスに基づいてXMLの他の値を返す必要があります。

例えば、私は「[email protected]」のためのXMLを照会してから返したい「ユーザーフルネーム2」、「サンプルデータ2」など

任意の助けいただければ幸いです!私はxpathに比較的新しいですし、W3Cの学校の例を見てみると、私は不足しています。

答えて

2

これはあなたのそれぞれの<record>を与えるだろう:述語を入れ子にすることができることを

$xml->xpath('/records/record[f[@id="10"] = "[email protected]"]'); 

注意を。


もう少し面白い

はまた、あなたのXPath =オペレータが右の値に すべて一致するノードを比較するため、これが動作するそれぞれの <record>

$xml->xpath('/records/record[f = "[email protected]"]'); 

を与えることになるこれを、です。 "...ここでは、<f>の値は'[email protected]'."です。 「10@id有する任意<f>'[email protected]'.の値を持っています...」を複数<f>エレメント10のIDを持っていた場合、すなわち、それはそれらすべてをチェックする次のよう

は従って最初の式を読み取り。

0

ます。また、ナビゲーションの代わりに、ネストされた述語条件でこれを達成することができます:

/records/record/f[@id=10 and text()='[email protected]']/.. 

これは言う、「それからの親を取得し、この条件に合致するメールアドレスのノードを見つけ、f秒までナビゲートノード(これはrecordです)。そこから特定のfにナビゲートすることができます。