2015-10-12 4 views
0

Я пытаюсь выбрать некоторые дочерние элементы из своего объекта XElement и поместить их в новый XElement.Выберите подэлементы из XElement в новый XElement

var objNodes = 
    doc.Descendants("object") 
     .Where(node => node.Attribute("table").Value == idbsObject.Key) 
     .Select(item => new XElement(item.Element("object"), new XElement(item.Element("nodes")))); 

С этой части

var objNodes = 
     doc.Descendants("object") 
      .Where(node => node.Attribute("table").Value == idbsObject.Key) 

Я могу получить объект элемента, глядя, как этот

<object occur="-1" prefix="" table="Articles" description="" singlename="" name="" statemode="disabled" link="" exportable="0"> 
    <views> 
    <view id="1" type="" name=""> 
     <sql>SELECT ObjectID FROM WHERE</sql> 
     <columns> 
     <column description="" sortnode="" width="" /> 
     </columns> 
     <values /> 
    </view> 
    </views> 
    <objectviews> 
    <view id="view1" type="view" name="Bekijken" show="1" link="" /> 
    <view id="view2" type="edit" name="Bewerken" show="1" link="" /> 
    <view id="view3" type="delete" name="Verwijderen" show="1" link="" /> 
    <view id="view4" type="add" name="Toevoegen" show="1" link="" /> 
    </objectviews> 
    <nodes> 
    <node id="ArticleId" description="" required="" datatype="i" nodetype="" fieldlength="" reference="" exclude="" tab="" order="0" default="" decimals="" maxchars="" help="" unique="" show="" /> 
    <node id="Title" description="" required="" datatype="s" nodetype="" fieldlength="" reference="" exclude="" tab="" order="10" default="" decimals="" maxchars="" help="" unique="" show="" /> 
    </nodes> 
    <tabs> 
    <tab id="" order="0" type="normal" child="" foreignkey="" description="Algemeen" link="" /> 
    </tabs> 
</object> 

Но как я могу получить элемент объекта и узлы? Я могу получить узлы, но я не могу объединить элемент объекта и узлов в один. Для элемента объекта мне не нужны все дочерние элементы.

Ожидаемый результат

<object occur="-1" prefix="" table="Articles" description="" singlename="" name="" statemode="disabled" link="" exportable="0"> 
    <nodes> 
    <node id="ArticleId" description="" required="" datatype="i" nodetype="" fieldlength="" reference="" exclude="" tab="" order="0" default="" decimals="" maxchars="" help="" unique="" show="" /> 
    <node id="Title" description="" required="" datatype="s" nodetype="" fieldlength="" reference="" exclude="" tab="" order="10" default="" decimals="" maxchars="" help="" unique="" show="" /> 
    </nodes> 
</object> 

Когда я пытаюсь получить объектный элемент как этого

var objNodes = doc.Descendants("object") 
        .Where(node => node.Attribute("table").Value == idbsObject.Key) 
        .Select(item => new XElement(item.Element("object"))); 

objNodes является null

+0

не установлен VS, но ответ будет выглядеть следующим образом:. Вар objNodes = doc.Descendants ("объект") .гд (узел => node.Attribute ("таблица") Значение == idbsObject.Key) . Выбрать (item => новый XElement ("объект", новый объект [] {item.Attributes(), item.Element ("nodes")})); – jdweng

+0

@jdweng ваш код, кажется, выполняет эту работу, он дает мне результат, который мне нужен. Если я отвечу на мой вопрос, я могу отметить ваш ответ как принятый :) – Sybren

ответ

1

Комментарии не могут быть помечены как принято. Я знал, что это сработает, потому что я ответил на аналогичный вопрос несколько недель назад. В исходном ответе была сделана небольшая ошибка, используемая XElement [], и получена ошибка, потому что я сочетал XAttributes и XElement []. Обратите внимание, что в моем решении используется «объект», который является именем тега.

var objNodes = doc.Descendants("object") .Where(node => node.Attribute("table").Value == idbsObject.Key) .Select(item => new XElement("object", new object[] {item.Attributes(), item.Element("nodes")})); 
+0

Я знаю, что комментарии не могут быть отмечены как принятые, поэтому я попросил вас ответить на вопрос. В любом случае спасибо за ваш ответ. – Sybren