2012-01-31 110 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在一行中完成嗎?

另外,我需要根據該電子郵件地址返回XML中的其他一些值。

例如,我想查詢XML的「[email protected]」,然後返回「用戶全名2」,「樣本數據2」等

任何幫助,將不勝感激!我對xpath比較陌生,在嘗試瀏覽W3C學校的示例之後,我將簡要介紹一下。

回答

2

這會給你相應的<record>

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

注意,謂詞可以嵌套。


有一點比較有意思的是這一點,這也會給你相應的<record>

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

這工作,因爲XPath的=操作所有匹配的節點進行比較,以右手值。您可以將其讀作「...其中任何<f>的值爲'[email protected]'.

因此,第一表達如下:「......其中具有的10一個@id任何<f>具有'[email protected]'.值」,即如果有多個要素<f>具有10的ID,它會檢查它們。

0

您還可以使用導航來代替嵌套謂詞條件做到這一點:

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

這上面說,「向下導航到f S,找到匹配這個條件的電子郵件地址的節點,然後得到的父該節點(它是record)「。從那裏你可以導航到一個特定的f。