-1

データから xml データを作成しようとしています。作成は成功しましたが、出力が正しくありません。この問題を解決するにはどうすればよいですか?

これが私のコードです:

private void btnGenerate_Click(object sender, EventArgs e)
    {
        XElement xml = new XElement("Navigation",
            new XElement("NavigationSets"));
        foreach (DataRow row_navs in GetNavigationSets().Rows)
        {
            xml.Add(new XElement("NavigationName", row_navs["name"].ToString()));
            foreach (DataRow row_sets in GetMenusInNavigationSetByNavigation(2).Rows)
            {
                if (int.Parse(row_sets["id"].ToString()) == int.Parse(row_navs["id"].ToString()))
                {
                    foreach (DataRow row_menus in GetMenuById(int.Parse(row_sets["menu_id"].ToString())).Rows)
                    {
                        xml.Add(new XElement("MenuName", row_menus["name"].ToString()));
                    }
                }
            }
        }
        xml.Save("data.xml");
    }

このような出力を期待しています

    <?xml version="1.0" encoding="utf-8"?>
<Navigation>
    <NavigationSets>
        <NavigationName>
            <MenuName></MenuName>
        </NavigationName>
    <NavigationSets/>
</Navigation>

私の現在のコードでは、出力は次のようになります

  <?xml version="1.0" encoding="utf-8"?>
<Navigation>
    <NavigationSets/>
        <NavigationName></NavigationName>
    <MenuName></MenuName>
</Navigation>
4

2 に答える 2

3

Jon Skeetsの回答に追加するには、

使用することもできます

using System.Xml.Linq;

リストをループして、すべてが1つのステートメントになるようにします。

new XElement("NavigationSets",
    menus.Select(menu => new XElement("MenuName"))
)
于 2013-02-07T08:32:46.720 に答える
1

要素を追加するときを見てください。

xml.Add(new XElement("NavigationName", row_navs["name"].ToString()));
xml.Add(new XElement("MenuName", row_menus["name"].ToString()));

xmlこの要素はどこにありますか:

XElement xml = new XElement("Navigation",
           new XElement("NavigationSets"));

つまりxmlNavigation要素ではなくNavigationSets要素です。次のようなものが必要だと思います:

XElement outer = new XElement("Navigation");
XElement inner = new XElement("NavigationSets");
outer.Add(inner);

... に追加しinnerます。

于 2013-02-07T08:23:09.107 に答える