我有不寻常的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的最佳方法是什么?感谢。
答案 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”等的嵌套菜单项。