2015-06-17 134 views
0

XML文件的值的XPath獲得元素通過id來獲取元素,在PHP

<?xml version="1.0" encoding="UTF-8" standalone="yes"?> 
<ew-language id="en"> 
    <global> 
     <phrase id="actiondeleted" value="Deleted"> 
      <child_phrase_1 id="1234" value="numbers"> 
       <child id="test_id" value="test_value"/> 
       <child id="test_id" value="test_value_2"/> 
      </child_phrase_1> 
     </phrase> 
    </global> 
</ew-language> 

如何通過ID和值來獲得元件,使得該元素是unique.I嘗試這些

 $parent = ($xpath->query("//*[@id='$previous_tag_id']")&& $xpath->query("//*[@value='$previous_tag_value']"))->item(0); 
----------------------AND THIS ONE----------------------------------- 
    $parent = $xpath->query("//*[@id='$previous_tag_id']/*@value='$previous_tag_value')"->item(0); 
----------------------AND THIS ONE----------------------------------- 
$xpath->query("//*[@id='$previous_tag_id' and @value='$previous_tag_value']"); 

各語法不起作用。

+0

'// * [@ ID = 「爲test_id」 和@值=」 test_value_2「]'處理引號。 – splash58

+0

此XML最初包含數千個元素,我可以用// * [@ id =「test_id」和@value =「$ previous_tag_value」]替換// * [@ id =「test_id」和@ value =「test_value_2」] – User4834426

+0

'$ xpath-> query(「// * [@ id ='$ previous_tag_id'and @value ='$ previous_tag_value']」);' – User4834426

回答

1

使用//*[@id='$previous_tag_id' and @value='$previous_tag_value']應該已經工作,看到eval.in演示:

$xml = <<<XML 
<?xml version="1.0" encoding="UTF-8" standalone="yes"?> 
<ew-language id="en"> 
    <global> 
     <phrase id="actiondeleted" value="Deleted"> 
      <child_phrase_1 id="1234" value="numbers"> 
       <child id="test_id" value="test_value"/> 
       <child id="test_id" value="test_value_2"/> 
      </child_phrase_1> 
     </phrase> 
    </global> 
</ew-language> 
XML; 
$doc = new DOMDocument; 
$doc->loadXML($xml); 
$xpath = new DOMXPath($doc); 
$previous_tag_id = "test_id"; 
$previous_tag_value = "test_value_2"; 
$result = $xpath->query("//*[@id='$previous_tag_id' and @value='$previous_tag_value']"); 
foreach($result as $r) 
{ 
    echo $doc->saveXML($r); 
} 

輸出:

<child id="test_id" value="test_value_2"/>