Чтение из атрибута, который может отсутствовать в методе xelement.add в C # - PullRequest
0 голосов
/ 24 марта 2012

Я пытаюсь создать XElement, который читает из другого XElement, созданного из файла. Ниже приведен пример кода. У меня вопрос, как мне кодировать атрибут источника, которого там может не быть? docHeader и счет-фактура являются XElements. При выполнении этого, где отсутствует один атрибут, я получаю ошибку «Ссылка на объект не установлена ​​на экземпляр объекта».

Наверное, я спрашиваю: есть ли "безопасный" способ чтения элементов и атрибутов, если их там нет?

invoice.Add(
    new XAttribute("InvoiceNumber", docHeader.Attribute("InvoiceNumber").Value), 
    new XAttribute("InvoiceSource", docHeader.Attribute("InvoiceSource").Value));

Ответы [ 2 ]

0 голосов
/ 24 марта 2012

Попробуйте разбить код, чтобы он стал более гибким и читабельным.

var src = docHeader.Attribute("InvoiceSource");
var num = docHeader.Attribute("InvoiceNumber");

if(src != null && num != null)
{
  invoice.Add(
    new XAttribute("InvoiceNumber", num.value), 
    new XAttribute("InvoiceSource", src.value)); 
}
0 голосов
/ 24 марта 2012

Вы получаете исключение, потому что если атрибут InvoiceSource отсутствует, docHeader.Attribute("InvoiceSource") возвращает ноль.Достаточно будет просто проверить, как

if (docHeader.Attribute("InvoiceSource") != null)
{
    // here you can be sure that the attribute is present
}

.

...