0

我有不寻常的 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 的最佳方法是什么?谢谢。

4

1 回答 1

1

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

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”等的嵌套菜单项。

于 2012-05-16T08:29:45.087 回答