如何解析具有无限子部分到数据集的xml

时间:2012-05-16 07:57:09

标签: vb.net dataset xml-parsing

我有不寻常的XML格式,如下例

<mainmenu>
    <menu caption="File">
        <menuitem caption="New" tooltip="Create New File" shortcut="Ctrl-N" Action="New">
        <menuitem caption="Open" tooltip="Open Existing File" shortcut="Ctrl-O" Action="Open">
        <menu caption="Import">
            <menuitem caption="As New File" tooltip="Import To New Sheet" shortcut="F11" Action="ImportNew">
            <menuitem caption="As Current File" tooltip="Import To Current Active Sheet" shortcut="F12" Action="ImportOpen">
        </menu>
        <menuitem caption="Exit" tooltip="Exit Program" shortcut="Ctrl-Q" Action="Exit">
    </menu>
    <menu caption="Edit">
        <menuitem caption="Cut" tooltip="" shortcut="Ctrl-C" Action="Cut">
        <menuitem caption="Copy" tooltip="" shortcut="Ctrl-X" Action="Copy">
        <menuitem caption="Paste" tooltip="" shortcut="Ctrl-V" Action="Paste">
    </menu>
</mainmenu>

我需要将上面的XML解析为带有数据集的表格数据视图,然后才能从函数中检索,例如:

getData("Edit")

result:

caption tooltip shortcut action
cut     ...
copy    ...
paste   ...

另一个例子

getData("File.Import")

result:

caption         tooltip shortcut action
as new file     ...
as current file ...

那么,解析XML的最佳方法是什么?感谢。

1 个答案:

答案 0 :(得分:1)

Linq to Xml将是一个很好的方法。您可以根据条件选择菜单元素,然后根据 menuitem 元素的属性选择所需数据类型的集合。我在下面写了一个示例,它实现了简单的示例 getData(“Edit”)并使用子菜单项填充了DataTable(在您的示例中, Cut 复制粘贴)。

Dim xdoc As XDocument
Dim filename As string    // TODO set XML filename
Dim name As String
Dim dt as DataTable
xdoc = XDocument.Load(filename)
name = "Edit"
dt = New DataTable()

xdoc.Root.Elements().Where(Function(s) s.Attribute("caption") = name).Elements("menuitem").ToList(). _
    ForEach(dt.Rows.Add(x.Attribute("caption"), x.Attribute("tooltip"), x.Attribute("shortcut"), x.Attribute("action")))

应该可以扩展这种方法,根据需要选择基于“File.Import”等的嵌套菜单项。