2013-11-14 4 views
2

Мое приложение получает данные из веб-службы SharePoint (используя запрос SOAP и CAML), я использую документ Xdocument для хранения извлеченного xmlNode и затем назначаю xdocument XMLDataSource, который привязан к gridView.Как фильтровать Xdocument и возвращать Xdocument?

Теперь мне нужно отфильтровать Xdocument перед привязкой, чтобы выбрать только те записи, где элемент (ows_Partner_x0020_Type) соответствует переменной.

Я пытаюсь так:

doc = doc.Descendants(z + "row").Where(rows => rows.Attribute("ows_Partner_x0020_Type").Value == Partner_Type.SelectedValue); 

или

var bar = doc.Descendants(z + "row").Where(rows => rows.Attribute("ows_Partner_x0020_Type").Value == Partner_Type.SelectedValue); 

, но проблема в том, что тип возвращаемого выше LINQ является System.Collections.Generic.IEnumerable<System.Xml.Linq.XElement>

который не бросить ничего подобного XDocument, который требуемый формат для привязки к XMLDataSource как doc.ToString().

Надеюсь, что смогу объяснить проблему.

Большое спасибо.

Вишал

ответ

4

Если вы просто пытаетесь создать документ с этими элементами, вы можете использовать:

XDocument filteredDocument = new XDocument(new XElement("root", bar)); 

(Это создаст документ с корневым элементом <root>, и все элементы, которые вас интересуют непосредственно под этим.)

Не совсем уверен в отношении всех обязательных деталей - я сильно подозреваю, что может быть лучшая альтернатива - но это, безусловно, даст вам новый XDocument.

+0

Спасибо, что это работает, проблема заключается в том, что она создает одну и ту же структуру трижды. как база {System.Xml.Linq.XContainer}: Декларация: нулевая DocumentType: нуль NodeType: Документ Корень: Vishal

+0

Кстати тип бара: System.Linq.Enumerable.WhereEnumerableIterator Vishal

+0

@VishalSachdeva: Очень сложно сказать, что у вас есть. Что произойдет, если вы выгрузите весь документ * в качестве документа XML *? Я подозреваю, что у вас только 3 соответствующих строки ... –

Смежные вопросы