Save()
。我正在检查XML ProductDetails 节点下的属性 ProductCount ,如果该属性不存在,请在此节点下添加具有默认值的属性。
我可以检查属性是否存在,但是我无法添加它,虽然它没有给我任何错误但是甚至没有添加属性。
这是我的代码:
XDocument XMLDoc = XDocument.Load(fileName);
foreach (var detail in XMLDoc.Descendants(_ns + "ProductDetails"))
{
if (detail.Attribute("ProductCount") == null)
{
detail.SetAttributeValue("ProductCount", "1");
}
}
_ns有我的命名空间。
我无法弄清楚我做错了什么,如果它不存在,为什么不添加ProductCount属性。
答案 0 :(得分:4)
尝试将值作为整数而不是字符串传递,如下所示:
detail.SetAttributeValue("ProductCount", 1);
编辑:写了不好的建议......但我试图测试你的问题...
创建了一个包含内容的文件:
<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>
所以一切都对我有用。
答案 1 :(得分:0)
试试这个:
if (detail.Attribute("ProductCount") == null)
{
detail.Add(new XAttribute("ProductCount", "1"));
}