2012-03-24 4 views
0

Im возникают проблемы понимания этого:Linq2Xml Местоположение иерархии XAttribute?

enter image description here

почему Microsoft поставил XAttribute под XObject?

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

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

... с элементом.

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

ответ

1

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

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

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

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

2

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

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

0

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