Ниже документа xml
<Root>
<Global>
</Global>
<local>
<section name="A">
<subsection name="A">
<innersection name="A">
<Property1>
</Property1>
</innersection>
<innersection name="B">
<Property1>
</Property1>
</innersection>
</subsection>
<subsection name="B">
<innersection name="A">
<Property1>
</Property1>
</innersection>
<innersection name="B">
<Property1>
</Property1>
</innersection>
</subsection>
</section>
<section name="B">
<subsection name="A">
<innersection name="A">
<Property1>
</Property1>
</innersection>
<innersection name="B">
<Property1>
</Property1>
</innersection>
</subsection>
<subsection name="B">
<innersection name="A">
<Property1>
</Property1>
</innersection>
<innersection name="B">
<Property1>
</Property1>
</innersection>
</subsection>
</section>
</local>
</Root>
Теперь я хочу свойство property1, раздел name= "B" и подраздел name= "B" и innersection name= "B" в одном запросе с использованием linq для xml.
Вот мой вариант, альтернативный Jon's, предполагая, что Property1 встречается только один раз внутри innersection, и вам нужно только одно:
var Property1 = doc.Root.Elements("local").Elements("section")
.Where(x => x.Attribute("name") == "B").Elements("subsection")
.Where(x => x.Attribute("name") == "B").Elements("innersection")
.Where(x => x.Attribute("name") == "B").Element("Property1");
EDIT: Удален LINQ to XML "обычный" стиль запроса, поскольку ssg лучше. Однако я хотел оставить версию XPath. Он не тестировался, но я думаю, что он должен работать...
var properties = doc.XPathSelectElements(
"//section[@name='B']/subsection[@name='B']/innersection[@name='B']/property1");
Поскольку этот вопрос также был отмечен как vb.net, вот эквивалент ssg-запроса в vb.net:
Dim Property1 = doc.<local>.<section>.Where(Function(x) x.@name = "B") _
.<subsection>.Where(Function(x) x.@name = "B") _
.<innersection>.Where(Function(x) x.@name = "B") _
.<Property1>