Я пробовал следующее, но он возвращает неожиданные результаты:
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', однако он должен возвращать только первый, где element / subelement @ id = 1 / subsubelement @ id = 3
Однако, если результаты. Предки. используется, он возвращает правильный «субэлемент», и если эта строка не включена, он возвращает один «субэлемент», который также является правильным. Я не понимаю, почему при mvoing «элементу» он возвращает оба (я понимаю, что оба имеют субэлемент с id = 1, но я думал, что каждый последующий запрос отфильтрует предполагаемые результаты) у кого-нибудь есть предложения?