C#: Создание использования XML-документа наличие Linq не надлежащая продукция?

Я пытаюсь создать данные 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"?>

    
        
            
        
    

В моем текущем коде моя продукция похожа на это

  <?xml version="1.0" encoding="utf-8"?>

    
        
    

1
жаль проверка это! обновленный вопрос
добавлено автор MekeniKine, источник
That' s не действительный XML. был бы, любой или </ MenuName> .
добавлено автор DaveShaw, источник

2 ответы

Добавить к ответу Джона Скитса,

Можно также использовать

using System.Xml.Linq;

образовать петли через списки, таким образом, это - все одно заявление,

new XElement("NavigationSets",
    menus.Select(menu => new XElement("MenuName"))
)
3
добавлено

Посмотрите на то, когда вы добавите элементы:

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"));

Это означает xml является Навигацией элемент, не NavigationSets элемент. Я подозреваю, что вы хотите что-то как:

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

... тогда добавьте к <коду>, внутреннему .

1
добавлено
yeh это работает, теперь моя проблема, - то, что MenuName должен быть в NavigationName
добавлено автор MekeniKine, источник
был перепутан сэр, можно ли предоставить мне, как сделать это? thnaks!
добавлено автор MekeniKine, источник
@MekeniKine: Право, поэтому примените ту же самую логику снова: когда вы создаете NavigationName элемент, держитесь за него как за переменную, таким образом, можно добавить к нему, когда вы создаете MenuName элемент.
добавлено автор Jon Skeet, источник
@MekeniKine: You' ре, вероятно, чтобы учиться намного больше, если вы думаете об этом тщательно и делаете это сами. Думайте, о котором элементе вы хотите добавить MenuName к. Теперь вещь, о котором вы являетесь добавлением его к, и что изменяет вас, должна сделать. Используйте изменение I' ve, показанный для Navigation/NavigationSets как руководство.
добавлено автор Jon Skeet, источник
Microsoft Stack Jobs
Microsoft Stack Jobs
1 788 участник(ов)

Work & freelance only Microsoft Stack. Feed https://t.me/Microsoftstackjobsfeed Чат про F#: @Fsharp_chat Чат про C#: @CSharpChat Чат про Xamarin: @xamarin_russia Чат общения:@dotnettalks

Microsoft Developer Community Chat
Microsoft Developer Community Chat
584 участник(ов)

Чат для разработчиков и системных администраторов Microsoft Developer Community. __________ Новостной канал: @msdevru __________ Баним за: оскорбления, мат, рекламу, флуд, флейм, спам, NSFW контент, а также большое количество оффтоп тем. @banofbot