使用XDocument添加属性的问题

时间:2011-07-12 10:07:49

标签: c# xml linq-to-xml

请注意最后的评论:OP忘记致电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属性。

2 个答案:

答案 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"));
}