2016-03-14 2 views
0

Может ли кто-нибудь указать, почему PHP ниже не удаляет узел XML?PHP - Поиск и удаление узла XML через DOM

Я хотел, чтобы удалить весь узел изображения, который содержит значение original_number из 823.

Спасибо заранее.

$xml = '<?xml version="1.0"?> 
<property> 
    <edited>true</edited> 
    <images> 
     <image> 
      <is_required><![CDATA[true]]></is_required> 
      <original_number><![CDATA[823]]></original_number> 
     </image> 

     <image> 
      <is_required><![CDATA[true]]></is_required> 
      <original_number><![CDATA[555]]></original_number> 
     </image> 
</images> 
</property>'; 

$originalNumberToDelete = 823; 

$dom = new DOMDocument(); 
$dom->loadXML($xml->asXML(), LIBXML_NOBLANKS); 
$dom->formatOutput = true; 

$xpath = new DOMXPath($dom); 
foreach($xpath->query("property/images/image[original_number='".$originalNumberToDelete."']") as $node) { 
$node->parentNode->removeChild($node); 
} 

echo $dom->saveXML(); 
+0

что происходит? сообщение об ошибке? – michi

ответ

1

Может быть возможным решением является изменение

$dom->loadXML($xml->asXML(), LIBXML_NOBLANKS);

в

$dom->loadXML($xml, LIBXML_NOBLANKS);

Затем начните выражение XPATH с двойной косой черты:

$xml = '<?xml version="1.0"?> 
<property> 
    <edited>true</edited> 
    <images> 
     <image> 
      <is_required><![CDATA[true]]></is_required> 
      <original_number><![CDATA[823]]></original_number> 
     </image> 

     <image> 
      <is_required><![CDATA[true]]></is_required> 
      <original_number><![CDATA[555]]></original_number> 
     </image> 
</images> 
</property>'; 

$originalNumberToDelete = 823; 

$dom = new DOMDocument(); 
$dom->loadXML($xml, LIBXML_NOBLANKS); 
$dom->formatOutput = true; 

$xpath = new DOMXPath($dom); 
foreach($xpath->query("//property/images/image[original_number='".$originalNumberToDelete."']") as $node) { 
    $node->parentNode->removeChild($node); 
} 

echo $dom->saveXML(); 

Demo

+0

Одинокая косая черта также сделает это: '/ property/images/image' ... – michi

+0

Спасибо. Проблема в одиночной или двойной косой черте. – crooksy88

+0

Вот почему я поклонник объяснений в ответах - кроме кода. – michi

Смежные вопросы