2015-04-26 43 views
-1
$xpath = new DOMXPATH($xml); 

foreach($xpath->query("/root/info[name = '$c_name']") as $node) 
{ 
    $node->parentNode->removeChild($node); 
} 

在localhost上執行此代碼時出現此錯誤。如何從xml使用php刪除子節點

警告:DOMXPath ::查詢():無效表達

我想有在foreach循環錯誤。

回答

0

你的代碼錯過了錯誤處理,你創建xpath表達式的方式很容易被注入,這也很容易破壞它。

$xpath = new DOMXPATH($xml); 

$expression = "/root/info[name = '$c_name']"; 

$result = $xpath->query($expression); 

if (false === $result) { 
    throw new InvalidArgumentException(
     sprintf(
      'Xpath expression %s failed for input %s' 
      , var_export($expression, true) 
      , var_export($c_name, true) 
     ) 
    ); 
} 

foreach($result as $node) 
{ 
    $node->parentNode->removeChild($node); 
} 

這個例子並沒有處理注入問題只是引入適當的錯誤處理,讓你儘早在真正出現錯誤認識。

如果您進一步分析,可能會發現單引號問題。一個之前常見&一個涵蓋話題:

+0

我已經給我的問題的詳細信息,請點擊以下鏈接: http://stackoverflow.com/questions/29878713/remove- node-from-xml-document-by-node-value – Jay

+0

在此處編輯您的問題,請勿重新發布。除此之外,編輯是一種改進,因此請考慮將其移至此處。還添加了如何檢查編輯XML是否執行(不)的工作。 – hakre