2015-07-28 2 views
2

У меня есть $metas, что равно нулю, так что AppendChild не удалось. Почему SelectSingleNode возвращает пустой объект в моем коде:Почему SelectSingleNode возвращает нулевой объект?

$xml=[xml]@' 
<?xml version="1.0" encoding="iso-8859-1"?> 
<catalogue> 
    <products> 
    <product id="pdt1"> 
     <metas> 
     </metas> 
    </product> 
    <product id="pdt2"> 
     <metas> 
     </metas> 
    </product>  
    </products> 
</catalogue> 
'@ 

$product_code = "pdt2" 

$metas = $xml.SelectSingleNode("//catalogue/products/product[@code='$product_code']/metas") 


$attr=$xml.CreateAttribute("date");        
$attr.Value = "2015.07.24" 
$metas.Attributes.Append($attr) 

$newmeta1 = $xml.CreateElement('meta') 
$attr1=$xml.CreateAttribute("code"); 
$attr1.Value = "123456" 
$newmeta1.Attributes.Append($attr1) 

$metas.AppendChild($newmeta1) 

ответ

2

Ваш product XML узел не имеет атрибута code. Скорее, он имеет атрибут id. Поэтому вы должны использовать [@id=...] вместо [@code=...].

Попробуйте это:

$metas = $xml.SelectSingleNode("//catalogue/products/product[@id='$product_code']/metas") 
Смежные вопросы