我一直在尝试以下操作,但它会返回意外结果:
Dim xd As XDocument = _
<?xml version="1.0" encoding="utf-8"?>
<root>
<element>
<subelement id="1">
<subsubelement id="1"/>
<subsubelement id="3"/>
<subsubelement id="1"/>
</subelement>
<subelement id="2"/>
<subelement id="3"/>
</element>
<element>
<subelement id="4"/>
<subelement id="3"/>
<subelement id="2">
<subsubelement id="1"/>
<subsubelement id="1"/>
<subsubelement id="3"/>
</subelement>
<subelement id="5"/>
</element>
</root>
Dim haveSubelementId As Boolean = True
Dim haveSubSubelementId As Boolean = True
Dim results = From q In xd...<element>
If haveSubelementId Then
results = From q In results.<subelement> Where q.@id = 1
End If
If haveSubSubelementId Then
results = From q In results.<subsubelement> Where q.@id = 3
End If
results = results.Ancestors.<element>
上面的结果返回两个'element'节点但是它应该只返回第一个元素/子元素@id = 1 / subsubelement @ id = 3
但是如果结果。祖先。使用它返回正确的'子元素',如果不包含该行,则返回单个'subsubelement',这也是正确的我不明白为什么当mvoing到'element'时它返回两者(我发现它们都有一个子元素) id = 1,但我认为每个进一步的查询都会过滤掉前面的结果)任何人都有任何建议吗?
答案 0 :(得分:1)
我能让它正常工作的唯一方法是执行以下操作:
Dim results = From q In xd...<element>
If haveSubelementId Then
results = From q In results.<subelement> Where q.@id = 1
End If
If haveSubSubelementId Then
results = From q In results.<subsubelement> Where q.@id = 3
End If
For Each xe As XElement In results
If haveSubSubelementId Then
xe = xe.Parent.Parent
If haveSubelementId Then
xe = xe.Parent
End If
Console.WriteLine(xe.ToString)
Next
但它看起来有点笨拙,我希望可以从搜索查询中返回正确的元素集合。