我正在尝试根据该元素的子元素的属性选择元素。
原创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").@poultry = Ing.Poultry.ToString() _
Or rec.Descendants("Filter").@attr1 = "1" _
Or rec.Descendants("Filter").@attr2 = "0" _
And (rec.Descendants("Filter").@attr3 = "1" _
Or rec.Descendants("Filter").@attr4 = "0" _
Or rec.Descendants("Filter").@attr5 = "1"
这会抛出以下错误:“抛出了类型'System.Linq.SystemCore_EnumerableDebugViewEmptyException'的异常。”
代码尝试做的是选择所有Element1,其中该element1的filter元素与该语句的where子句匹配。
我对linq很新,我不确定我做错了什么。
答案 0 :(得分:0)
您想从xml中选择什么?您的linq语句中缺少select语句。 添加linq语句末尾的Select,例如Select(标签中的任何内容)
此外,您正在“搜索”您要搜索的元素,即
From rec In RecipeXmlDocument.Descendants("RECEPT")
应该是
From rec In RecipeXmlDocument.Descendants
下面是一个修改过的语句,你需要连接你的select语句
Dim xmlElement = From rec In RecipeXmlDocument.Descendants Where rec...<Filter>.@poultry = Ing.Poultry.ToString Or rec...<Filter>.@attr1 = "1" Or rec...<Filter>.@attr2 = "0" And (rec...<Filter>..@attr3 = "1" Or rec...<Filter>.@attr4 = "0" Or rec...<Filter>.@attr5 = "1")
注意:您必须在标签内添加一些元素才能选择它们