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")を実装し、 DataTable に子メニュー項目 (この例ではCutCopyPaste ) を設定する例を以下に書きました。

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 に答える