Linq2Xml Расположение иерархии XAttribute?

У меня проблемы с пониманием этого:

почему Microsoft поставила Xattribute под Xobject?

они говорят, что:

Атрибуты не являются производными от XNode; они не являются узлами в дереве XML. Вместо этого это просто пары имя / значение, связанные с элементом.

хорошо... с элементом.

так почему бы и нет, где я сделал ничью?

3 ответа

Решение

Дерево является деревом наследования, оно действительно не показывает, как объекты используются вместе.

Местоположение, которое вы предлагаете, просто не работает с точки зрения наследования. Элементы могут иметь дочерние элементы и атрибуты, поэтому если XAttribute был получен из XElement, это будет означать, что атрибуты могут иметь дочерние элементы и свои собственные атрибуты. То же самое относится и к XContainer, поэтому не имеет смысла размещать XAttribute рядом с XElement в дереве.

XNode - следующий шаг. Может ли XAttribute поместиться под XNode? На самом деле, нет. Когда вы смотрите на XML, в общем смысле, есть 2 основных структурных элемента: узлы и атрибуты. Ни один из них не является производным от другого, поэтому имеет смысл, чтобы XAttribute и XNode находились в разных ветвях дерева XObject.

Это просто оставляет XObject, который является базовым типом объекта Xml2Linq, и все должно происходить из него, так что это лучшее (и действительно единственно подходящее место) для типа XAttribute.

Атрибуты принадлежат элементу.

Использование наследования означало бы, что "атрибут - это (особый вид) элемент", что, очевидно, неверно. Атрибут не может иметь детей, например.

Это наследственное дерево и XAttribute происходит от XObject,

Другие вопросы по тегам