проблема добавления атрибута с использованием XDocument - PullRequest
0 голосов
/ 12 июля 2011

Обратите внимание на самый последний комментарий: ОП просто забыл позвонить Save().


Я проверяю XML для атрибута ProductCount в ProductDetails узел, и если атрибут отсутствует, добавьте атрибут со значением по умолчанию под этим узлом.

Я могу проверить, существует ли атрибут или нет, но я не могу добавить его, хотя это не такДайте мне любую ошибку, но даже не добавьте атрибут.

вот мой код:

 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 ]

4 голосов
/ 12 июля 2011

Попробуйте передать значение как целое число вместо строки, например:

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>

Так что у меня все работает.

0 голосов
/ 12 июля 2011

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

if (detail.Attribute("ProductCount") == null)
{
    detail.Add(new XAttribute("ProductCount", "1"));
}
...