Как загрузить документ XML и данные запроса при выборе пользователя - PullRequest
1 голос
/ 13 февраля 2012

Надеюсь, у тебя все хорошо и ты доволен своей жизнью, что бы ты ни делал.У меня большой вопрос.Ну, это большая работа для меня.Я попытался зайти в Google и следовать некоторым учебникам, но, наконец, понял, что мне нужна помощь от stackoverflowers.

У меня есть один большой xml-файл, такой как ниже.У меня нет контроля над его структурой, поскольку она уже существует с данными.

    <?xml version="1.0" encoding="utf-8" ?>
    <root>
      <Category Cat="A">
        <SubLevel Name="Sub1">
          <option name="a" />
          <option name="b" />      
        </SubLevel>
        <SubLevel Name="Sub2">
          <option name="a" />
          <option name="b" />     
        </SubLevel>    
      </Category>
      <Category Cat="B">
        <SubLevel Name="Sub1">
          <option name="a" />
          <option name="b" />     
        </SubLevel>
        <SubLevel Name="Sub2">
          <option name="a" />
          <option name="b" />     
       </SubLevel>
      </Category> 
    </root>

У меня есть страница aspx с выпадающим списком (для Cat, например, "A"), radiobuttonlist (для подуровня, например, "Sub1").) и флажок (для опции, например, "а").

Идея состоит в том, что если пользователь выберет категорию A из выпадающего списка, список радиобуттон будет заполнен соответствующими данными (например, Sub1, Sub2).если пользователь выберет Sub1 из списка radiobuttonlist, список флажков будет заполнен данными опций (например, "a, b")

У меня есть интерфейс, но у меня пока нет большого кода.Я могу загрузить XML в XMLDocument или набор данных, но не знаю, как продолжить заполнение / фильтрацию и запросы данных.Нужен код в vb.net.Нет предпочтений перед XMLDocument / Dataset.Я могу использовать что угодно.Итак, как мне этого добиться?

Большое спасибо за вашу помощь.(PS. Я не записывал частичные коды, которые у меня есть, потому что я хочу, чтобы он был гибким для вас)

1 Ответ

2 голосов
/ 13 февраля 2012

Я бы использовал LINQ to XML.Давайте предположим, что ваш XML жестко запрограммирован, и у вас есть только один комбинированный список в форме, которую вы используете.Итак, этот код:

Imports Systeml.Linq, System.Xml.Linq

Public Class Form1
Dim myxml As XDocument
Private Sub Form1_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load
    myxml = <?xml version="1.0" encoding="utf-8"?>
            <root>
                <Category Cat="A">
                    <SubLevel Name="Sub1">
                        <option name="a"/>
                        <option name="b"/>
                    </SubLevel>
                    <SubLevel Name="Sub2">
                        <option name="a"/>
                        <option name="b"/>
                    </SubLevel>
                </Category>
                <Category Cat="B">
                    <SubLevel Name="Sub1">
                        <option name="a"/>
                        <option name="b"/>
                    </SubLevel>
                    <SubLevel Name="Sub2">
                        <option name="a"/>
                        <option name="b"/>
                    </SubLevel>
                </Category>
            </root>
    Dim query = From node In myxml...<Category>
                Order By node.@Cat
                Select New With {.Category = node.@Cat.ToString()}

    With ComboBox1
        .DataSource = query.ToArray()
        .DisplayMember = "Category"
        .ValueMember = "Category"
    End With

End Sub

заполнит комбо-бокс первым уровнем.Теперь, в событии Click комбобокса вам нужен запрос, подобный

  Dim q2= From node2 In myxml...<SubLevel>
          Where node.Parent.@Cat = ComboBox1.Text
          Order By node.@Name
          Select New With {.Name = node.@Name.ToString()}

, из которого вы можете затем выполнить итерацию имен подуровня с помощью оператора For Each и динамически загрузить свой элемент управления RadioButton (пометив элементы управления сназвание подуровня).И так далее для флажков.Вы можете загрузить переменную myxml , используя XDocument.Load ()

Надеюсь, это поможет.Обработка XML в VB является одной из немногих областей, в которых она решительно связана с C #, поэтому, если у вас есть много XML для обработки, я бы остановился на VB.NET

...