#vb.net #linq
#vb.net #linq
Вопрос:
Пытаюсь написать select, который позволит мне выбрать определенный элемент office
Вот мой XML
<?xml version="1.0">
<regions>
<region>
<office>
<name>Office One</name>
</office>
<office>
<name>Office Two</name>
</office>
<settings>
<name>Main Regional Name</name>
</settings>
</region>
<region>
<office>
<name>Office Three</name>
</office>
<office>
<name>Office Four</name>
</office>
<settings>
<name>Secondary Regional Name</name>
</settings>
</region>
Вот мой код
Dim clfWizardXml As XElement
Dim selectRegion = lstRegions.SelectedItem
Dim selectOffice = lstOffices.SelectedItem
Console.WriteLine(selectRegion " " selectOffice)
Dim officeList As IEnumerable(Of XElement) = _
From region In clfWizardXml.Elements("region"), _
office In clfWizardXml.Elements("region").Elements("office") _
Where region.Element("settings").Element("name").Value = selectRegion _
And office.Element("name").Value = selectOffice
Select office
Я думаю, что моя проблема где-то здесь:
и office.Элемент («имя»).Значение = selectOffice
Спасибо всем за помощь, проблема заключалась в том, что у меня был элемент office на неправильном уровне во втором регионе.
Комментарии:
1. Если все имена офисов уникальны, вам не нужно фильтровать по регионам.
Ответ №1:
Похоже, ваша проблема заключается в том, что clfWizardXml.Elements("region")
она ничего не возвращает, поскольку region
не находится непосредственно под документом. Вместо этого вам нужно clfWizardXml.Root.Elements("region")
, или clfWizardXml.Descendants("region")
:
Dim officeList As IEnumerable(Of XElement) = _
From region In clfWizardXml.Root.Elements("region"), _
office In clfWizardXml.Root.Elements("region").Elements("office") _
Where region.Element("settings").Element("name").Value = selectRegion _
And office.Element("name").Value = selectOffice
Select office
Кроме того, поскольку VB.NET поддерживает XML-литералы, вы можете сделать его немного приятнее (во всяком случае, для меня, вы можете не согласиться):
Dim officeList As IEnumerable(Of XElement) =
From region In clfWizardXml...<region>,
office In region.<office>
Where region.<settings>.<name>.Value = selectRegion _
AndAlso office.<name>.Value = selectOffice
Select office
Комментарии:
1. Я попробовал ваше предложение, но я все еще не могу выбрать какие-либо офисы из второго региона
2. Оказывается, у меня была ошибка во вложенных элементах моего xml.