Попробуйте передать значение как целое число вместо строки, например:
detail.SetAttributeValue("ProductCount", 1);
РЕДАКТИРОВАТЬ: написал плохое предложение ... но я пытался проверить вашу проблему ...
создан файл .xml с содержанием:
<root>
<ProductDetails hadSuspension="false" isComplimentary="false" hasFamily1="false" hasFamily2="false" isInsured="false" hasJoint="false" ProductCount="1"/>
<ProductDetails hadSuspension="false" isComplimentary="false" hasFamily1="false" hasFamily2="false" isInsured="false" hasJoint="false"/>
</root>
тестовый код:
XDocument XMLDoc = XDocument.Load("C:\\a.xml");
foreach (var detail in XMLDoc.Descendants("ProductDetails"))
{
//Dont need to check, because SetAttributeValue creates if not exists
//if(detail.Attribute("ProductCount") == null)
detail.SetAttributeValue("ProductCount", 2);
}
XMLDoc.Save("C:\\b.xml");
и содержимое файла b.xml результата:
<root>
<ProductDetails hadSuspension="false" isComplimentary="false" hasFamily1="false" hasFamily2="false" isInsured="false" hasJoint="false" ProductCount="2" />
<ProductDetails hadSuspension="false" isComplimentary="false" hasFamily1="false" hasFamily2="false" isInsured="false" hasJoint="false" ProductCount="2" />
</root>
Так что у меня все работает.