如何加载 XML 文档并查询用户选择的数据

发布于 2025-01-04 16:04:09 字数 1319 浏览 0 评论 0原文

希望无论你在做什么,你都过得很好,生活幸福。 我有一个大问题。嗯,这对我来说是一项艰巨的工作。我尝试先用谷歌搜索并遵循一些教程,但最终意识到我需要 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 页面,其中包含下拉列表(对于类别,例如“A”)、单选按钮列表(对于子级别,例如“Sub1”)和复选框列表(对于选项,例如“a”)。

这个想法是,如果用户从下拉列表中选择类别 A,则单选按钮列表将填充相应的数据(例如 Sub1、Sub2)。如果用户从单选按钮列表中选择 Sub1,则复选框列表将填充选项数据(例如“a,b”)。

我有界面,但还没有太多代码。我可以将 xml 加载到 XMLDocument 或数据集中,但不知道如何继续填充/过滤和查询数据。需要vb.net中的代码。没有对 XMLDocument/Dataset 的偏好。我可以用任何东西。那么我怎样才能实现这一目标呢?

非常感谢您的帮助。 (PS。我没有写下我拥有的部分代码,因为我希望它对你来说是灵活的)

Hope you are doing well and happy with your life whatever you are doing.
I have a big question. Well, it's a big job for me. I tried to google and follow some tutorials frist but finally realise I need help from stackoverflowers.

I have a one big xml file such below. I have no control over its structure as it already exists with data.

    <?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>

I have a aspx page with a dropdownlist (for Cat eg."A"), radiobuttonlist(for Sublevel eg. "Sub1") and checkboxlist(for option eg."a").

The idea is if a user select Category A from dropdownlist, the Radiobuttonlist will be filled with corresponding data (eg. Sub1, Sub2). if the user select Sub1 from radiobuttonlist, the checkboxlist will be filled with option data (eg. "a, b")

I have the interface but I don't have much code yet. I can either load the xml into XMLDocument or a Dataset but don't know how to continue Filling/Filtering and Querying data. Need the code in vb.net. No preference over XMLDocument/Dataset. I can use whatever. So How can I achieve this?

THanks so much for your help. (PS. i didn't write down the partial codes I have coz I want it to be flexible for u)

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

假装不在乎 2025-01-11 16:04:09

我会使用 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 = [email protected]()}

    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 = [email protected]()}

然后您可以使用 For Each 语句迭代子级别名称,并动态加载单选按钮控件(使用子级别的名称标记控件)。复选框依此类推。您可以使用 XDocument.Load() 加载 myxml 变量

希望这会有所帮助。 VB 的 XML 处理是它比 C# 更胜一筹的几个领域之一,因此,如果您有大量 XML 需要处理,我会坚持使用 VB.NET

I'd use LINQ to XML. Let's assume that your XML is hard coded and you only have one combobox on the form you are using. So, this code:

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 = [email protected]()}

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

End Sub

will populate the combobox with the first level. Now, in the combobox's Click event, you need a query like

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

from which you can then iterate the sublevel Names using a For Each statement, and load up your radiobutton control dynamically (tagging the controls with the name of the sublevel). And so on for the checkboxes. You can load up the myxml variable by using XDocument.Load()

Hope this helps. VB's XML handling is one for the few areas in which it socres decisively over C#, so if you have a lot of XML to handle, I'd stick to VB.NET

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文