2015-06-17 7 views
0

XML файлполучить элемент по идентификатору и получить элемент по значению XPath в 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> 

как получить элемент по идентификатору и значением, так что элемент 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

'// * [@ ид = "test_id" и @ значение =» test_value_2 "]' И обрабатывать кавычки. – splash58

+0

Этот XML первоначально содержит тысячи элементов, я могу заменить // * [@ id = "test_id" и @ value = "test_value_2"] на // * [@ id = "test_id" и @value = "$ previous_tag_value"] – User4834426

+0

'$ xpath-> query (" // * [@ id = '$ previous_tag_id' и @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"/> 
Смежные вопросы