Проверка XML значений в списке - PullRequest
1 голос
/ 24 апреля 2020

У меня есть список строк, содержащих числа, как показано ниже {"2", "5", "7"}

Также у меня есть xml, как показано ниже

<Product>
   <Record>
      <Categories>
        <SubCategories>  
           <References>2</References>
           <References>1</References>
           <References>10</References>
        </SubCategories>
      </Categories>
      <Categories>
        <SubCategories>  
           <References>154</References>
            <References>75</References>
           <References>0</References>
        </SubCategories>
      </Categories>
      <Categories>
        <SubCategories>  
           <References>7</References>
        </SubCategories>
      </Categories>          
   </Record>
</product>

Я хочу получить все категории в отдельном xml файле, значение ссылки которого содержит хотя бы одно из значений, присутствующих в списке, упомянутом выше

Я застрял на том, как действовать

xmldoc.load(filepath) (xmldoc is the xmldocument of the file)
Dim CategoriesList = xmldoc.descendants("Record")
for each item in CategoriesList 
   Dim SubCategoriesList = item.descendants("Subcategories")
Next

Пожалуйста, дайте мне знать, как получить эти значения и получить необходимые категории

1 Ответ

0 голосов
/ 24 апреля 2020

Вы можете проверить, что элементы "Категории" имеют "Ссылки" с одним из значений, используя Any и HashSet(Of String)

Dim required = New String() {"1", "2", "3"}.ToHashSet()
Dim product = XDocument.Load("path-to-file")

Dim categories = product.Descendants("Categories").
    Where(Function(category) category.
        Descendants("References").
        Any(Function(r) required.Contains(r.Value))
    ).
    ToArray()

HashSet предназначен для уменьшения количества перечислений значений, HashSet.Contains проверить значение только одной операцией O (1).

...