2011-03-11 1 views
0

Я пытаюсь выбрать элементы на основе атрибутов элемента sub этого элемента.Фильтрация XElements по атрибутам элемента потомка

Оригинал Xml:

<Root> 
     <Element1 id="1"> 
     <element2>XXXX</element2> 
     <element2>XXXX</element2> 
     <element2>XXXX</element2> 
     <Filter attr1="1" attr2="0" attr3="0" attr4="1" attr5="0"></Filter> 
     </Element1> 
     <Element1 id="2"> 
     <element2>XXXX</element2> 
     <element2>XXXX</element2> 
     <element2>XXXX</element2> 
     <Filter attr1="1" attr2="0" attr3="0" attr4="1" attr5="0"></Filter> 
     </Element1> 
     <Element1 id="3"> 
     <element2>XXXX</element2> 
     <element2>XXXX</element2> 
     <element2>XXXX</element2> 
     <Filter attr1="1" attr2="0" attr3="0" attr4="1" attr5="0"></Filter> 
     </Element1> 
    </Root> 

Это то, что я сделал до сих пор:

Dim xmlElement = (From rec In RecipeXmlDocument.Descendants("RECEPT") _ 
Where (rec.Descendants("Filter")[email protected] = Ing.Poultry.ToString() _ 
        Or rec.Descendants("Filter")[email protected] = "1" _ 
        Or rec.Descendants("Filter")[email protected] = "0" _ 
        And (rec.Descendants("Filter")[email protected] = "1" _ 
         Or rec.Descendants("Filter")[email protected] = "0" _ 
         Or rec.Descendants("Filter")[email protected] = "1" 

Это выдает следующее сообщение об ошибке: «исключение типа 'System.Linq.SystemCore_EnumerableDebugViewEmptyException' был брошен «.

Код, который вы пытаетесь сделать, - это выбрать все элементы Element1, где элемент фильтра этого элемента1 соответствует предложению where.

Я довольно новичок в linq, и я не совсем уверен, что я делаю неправильно.

+1

Пожалуйста, разместите полные образцы, позволяющие воспроизвести проблему. Выполнение 'RecipeXmlDocument.Descendants (« RECEPT »)' с вашим размещенным образцовым документом кажется довольно странным, учитывая, что размещенный образец не содержит элементов с именем «RECEPT». Чтобы объяснить полученную ошибку, нам нужно увидеть достаточно информации, чтобы воспроизвести ее. –

+0

Извините, элемент «RECEPT» - «Элемент 1» в примере Xml, который я разместил. – Martinffx

ответ

0

Что именно вы хотите выбрать из xml? Оператор select отсутствует в вашем выражении linq. Добавить Выберите в конце вашего Linq заявление, например, выберите (независимо от тега)

Кроме того, вы перемещаетесь «над» элемент, который вы пытаетесь искать, т.е.

From rec In RecipeXmlDocument.Descendants("RECEPT") 

должны быть

From rec In RecipeXmlDocument.Descendants 

Ниже приводится исправленный заявление, к которому нужно сцепить ваш оператор выбора

Dim xmlElement = From rec In RecipeXmlDocument.Descendants Where rec...<Filter>[email protected] = Ing.Poultry.ToString Or rec...<Filter>[email protected] = "1" Or rec...<Filter>[email protected] = "0" And (rec...<Filter>[email protected] = "1" Or rec...<Filter>[email protected] = "0" Or rec...<Filter>[email protected] = "1") 

ПРИМЕЧАНИЕ. Вам нужно будет добавить некоторые элементы внутри тега, чтобы иметь возможность их выбирать.