2015-06-17 136 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"/>