Чтение из атрибута, который может отсутствовать в методе xelement.add в C#
Я пытаюсь создать XElement, который читает из другого XElement, созданного из файла. Ниже приведен пример кода. У меня вопрос, как мне кодировать атрибут источника, которого там может не быть? docHeader и счет-фактура являются XElements. При выполнении этого, где отсутствует один атрибут, я получаю ошибку "Ссылка на объект не установлена на экземпляр объекта".
Наверное, я спрашиваю, есть ли "безопасный" способ чтения элементов и атрибутов, если их там нет?
invoice.Add(
new XAttribute("InvoiceNumber", docHeader.Attribute("InvoiceNumber").Value),
new XAttribute("InvoiceSource", docHeader.Attribute("InvoiceSource").Value));
2 ответа
Решение
Вы получаете исключение, потому что если атрибут InvoiceSource
нет, docHeader.Attribute("InvoiceSource")
возвращает ноль. Простая проверка, как
if (docHeader.Attribute("InvoiceSource") != null)
{
// here you can be sure that the attribute is present
}
будет достаточно.
Попробуйте разбить код, чтобы он стал более гибким и читабельным.
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));
}