Linq2Xml Расположение иерархии XAttribute? - PullRequest
0 голосов
/ 24 марта 2012

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

enter image description here

почему Microsoft помещает Xattribute в Xobject?

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

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

fine ... С элементом.

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

Ответы [ 3 ]

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

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

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

1 голос
/ 24 марта 2012

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

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

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

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

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

Это дерево наследования, а XAttribute является производным от XObject.

...