Модераторы: Partizan, gambit
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Формирование XML, Добавить несколько тегов в исходящий XML 
:(
    Опции темы
ZMaximI
Дата 4.9.2012, 19:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 251
Регистрация: 18.5.2004
Где: Украина, г. Харьк ов

Репутация: нет
Всего: -1



Доброе время суток!

Помогите, пожалуйста решить проблему.
есть 2 класса из приложения:

1 - откуда собственно вызывается формирование XML
Код

using System;
using System.Collections.ObjectModel;
using System.ComponentModel;
using System.IO;
using System.Text;
using System.Windows;
using System.Windows.Controls;
using System.Xml.Serialization;
using ButterCupMediaPackager.ModelView;
using Microsoft.Win32;
using Path = System.IO.Path;

namespace ButterCupMediaPackager.Controls
{
    /// <summary>
    /// Interaction logic for MagazineSource.xaml
    /// </summary>
    /// 
  

    public partial class MagazineSource : UserControl, INotifyPropertyChanged
    {
        public MagazineSource()
        {
            InitializeComponent();
        }

        private string _outputDirectory;
        public string OutputDirectory
        {
            set { _outputDirectory = value; }
        }

        private Publications _publications = new Publications();
        private void SetPublications(Publications value)
        {
            _publications = value;
            OnPropertyChanged(new PropertyChangedEventArgs("Publications"));
        }

        public ObservableCollection<Publication> Publications
        {
            get { return _publications.PublicationsCollection; }
        }

        #region Implementation of INotifyPropertyChanged

        public event PropertyChangedEventHandler PropertyChanged;

        private void OnPropertyChanged(PropertyChangedEventArgs e)
        {
            PropertyChangedEventHandler handler = PropertyChanged;
            if (handler != null) handler(this, e);
        }

        #endregion

        private string _fileName;
        private readonly OpenFileDialog _loadMagazineDialog = new OpenFileDialog { Filter = "XML files|*.xml" };

        private readonly SaveFileDialog _saveMagazineDialog = new SaveFileDialog
                                                                  {
                                                                      Filter = "XML files|*.xml",
                                                                      FileName = "magazine_source.xml"
                                                                  };

        private void LoadMagazineButton_Click(object sender, RoutedEventArgs e)
        {
            if (_loadMagazineDialog.ShowDialog().GetValueOrDefault())
            {
                using (var fs = _loadMagazineDialog.OpenFile())
                {
                    Publications ps = null;
                    try
                    {
                        XmlSerializer serializer = new XmlSerializer(typeof(Publications));
                        ps = (Publications) serializer.Deserialize(fs);
                    }
                    catch (Exception)
                    {
                        MessageBox.Show("XML not properly formatted", Properties.Resources.Error, MessageBoxButton.OK,
                                        MessageBoxImage.Error);
                        return;
                    }
                    SetPublications(ps);
                }
                _fileName = _loadMagazineDialog.FileName;
            }
        }

    

        private void SaveMagazineButton_Click(object sender, RoutedEventArgs e)
        {
            var fileName = _fileName;
            if (string.IsNullOrEmpty(fileName))
            {
                if (_saveMagazineDialog.ShowDialog().GetValueOrDefault())
                    fileName = _saveMagazineDialog.FileName;
                else 
                    return;
            }
            XmlSerializer serializer = new XmlSerializer(typeof(Publications));
            XmlSerializerNamespaces ns = new XmlSerializerNamespaces();
            ns.Add("", "");
            string utf8;
            using (StringWriter writer = new Utf8StringWriter())
            {
                serializer.Serialize(writer, _publications, ns);
                utf8 = writer.ToString();
            }
            File.WriteAllText(fileName, utf8);

            _fileName = fileName;
        }

        private void AddPublicationButton_Click(object sender, RoutedEventArgs e)
        {
            Publications.Insert(0, new Publication());
        }

        private void DeletePublicationButton_Click(object sender, RoutedEventArgs e)
        {
            if (MessageBox.Show("Do you want to delete this publication?", "Delete publication",
                MessageBoxButton.YesNo, MessageBoxImage.Question, MessageBoxResult.No) == MessageBoxResult.Yes)
            {
                Publications.Remove((sender as Button).DataContext as Publication);
            }
        }

        private void UseCurrentIssueButton_Click(object sender, RoutedEventArgs e)
        {
            ((sender as Button).DataContext as Publication).Name = Path.GetFileName(_outputDirectory);
        }

        private void ListBox_SelectionChanged(object sender, SelectionChangedEventArgs e)
        {

        }

    }

    public class Utf8StringWriter : StringWriter
    {
        public override Encoding Encoding
        {
            get { return Encoding.UTF8; }
        }
    } 
}


2 - формирование XML
Код

using System;
using System.Collections.ObjectModel;
using System.ComponentModel;
using System.IO;
using System.Linq;
using System.Xml.Serialization;

namespace ButterCupMediaPackager.ModelView
{
    public abstract class ModelViewObject : INotifyPropertyChanged
    {
        public event PropertyChangedEventHandler PropertyChanged;

        protected void OnPropertyChanged(string propertyName)
        {
            PropertyChangedEventHandler handler = PropertyChanged;
            if (handler != null)
            {
                var e = new PropertyChangedEventArgs(propertyName);
                handler(this, e);
            }
        }

        protected bool SetValue<T>(ref T field, T value, string propertyName)
        {
            if (Equals(field, value))
                return false;
            field = value;
            OnPropertyChanged(propertyName);
            return true;
        }
    }

    [Serializable]
    [XmlRoot("gallery")]
    public class Galleries : ModelViewObject
    {
        private readonly ObservableCollection<Gallery> _galleries = new ObservableCollection<Gallery>();

        [XmlIgnore]
        public ObservableCollection<Gallery> GalleriesCollection
        {
            get { return _galleries; }
        }

        [XmlArray("galleryindex")]
        public Gallery[] GalleriesArray
        {
            get { return _galleries.ToArray(); }
            set
            {
                _galleries.Clear();
                foreach (var galleryImage in value)
                    _galleries.Add(galleryImage);
            }
        }
    }

    [Serializable]
    [XmlType("imagegallery")]
    public class Gallery : ModelViewObject
    {
        private string _name;
        [XmlAttribute("id")]
        public string Name
        {
            get { return _name; }
            set
            {
                if (SetValue(ref _name, value, "Name"))
                    OnPropertyChanged("HelpTip");
            }
        }

        private readonly ObservableCollection<GalleryImage> _images = new ObservableCollection<GalleryImage>();

        [XmlIgnore]
        public ObservableCollection<GalleryImage> Images
        {
            get { return _images; }
        }

        [XmlElement("src", typeof(GalleryImage))]
        public GalleryImage[] ImagesArray
        {
            get { return _images.ToArray(); }
            set
            {
                _images.Clear();
                foreach (var galleryImage in value)
                    _images.Add(galleryImage);
            }
        }

        [XmlIgnore]
        public string HelpTip
        {
            get { return string.Format("Help:\nIn PDF create a weblink: showgallery\n({0})", Name); }
        }
    }

    [Serializable]
    [XmlType("src")]
    public class GalleryImage : ModelViewObject
    {
        private string _image = string.Empty;
        [XmlAttribute("image")]
        public string Image
        {
            get { return _image; }
            set
            {
                SetValue(ref _image, value, "Image");
            }
        }

        private string _imagePath = string.Empty;

        [XmlIgnore]
        public string ImagePath
        {
            get
            {
                return _imagePath;
            }
            set
            {
                Image = Path.GetFileName(value);
                SetValue(ref _imagePath, value, "ImagePath");
            }
        }

        private string _description;
        [XmlElement("description")]
        public string Description
        {
            get { return _description; }
            set { SetValue(ref _description, value, "Description"); }
        }
    }

    [Serializable]
    [XmlRoot("package")]
    public class Publications : ModelViewObject
    {
        private readonly ObservableCollection<Publication> _publications = new ObservableCollection<Publication>();

        [XmlIgnore]
        public ObservableCollection<Publication> PublicationsCollection
        {
            get { return _publications; }
        }

        [XmlArray("Store")]
        public Publication[] PublicationArray
        {
            get { return _publications.ToArray(); }
            set
            {
                _publications.Clear();
                foreach (var galleryImage in value)
                    _publications.Add(galleryImage);
            }
        }
    }

    [Serializable]
    [XmlType("product")]
    public class Publication : ModelViewObject
    {
        private string _name;
        [XmlAttribute("ID")]
        public string Name
        {
            get { return _name; }
            set { SetValue(ref _name, value, "Name"); }
        }

        private string _issueName;

        [XmlElement("ref")]
        public string IssueName
        {
            get { return _issueName; }
            set { SetValue(ref _issueName, value, "IssueName"); }
        }

        private string _urlToZip;
        [XmlElement("loc")]
        public string UrlToZip
        {
            get { return _urlToZip; }
            set { SetValue(ref _urlToZip, value, "UrlToZip"); }
        }

        private PublicationCover _cover;
        [XmlElement("image")]
        public PublicationCover Cover
        {
            get { return _cover ?? (_cover = new PublicationCover()); }
            set { SetValue(ref _cover, value, "Cover"); }
        }

        
       
        private PublicationCoverBig _coverBig;
        [XmlElement("image_cover")]
        public PublicationCoverBig CoverBig
        {
            get { return _coverBig ?? (_coverBig = new PublicationCoverBig()); }
            set { SetValue(ref _coverBig, value, "CoverBig"); }
        }


        private PublicationPreviewImage _previewImage;
        [XmlElement("image_preview")]
        public PublicationPreviewImage PreviewImage
        {
            get { return _previewImage ?? (_previewImage = new PublicationPreviewImage()); }
            set { SetValue(ref _previewImage, value, "PreviewImage"); }
        }




        private string _description;
        [XmlElement("desc")]
        public string Description
        {
            get { return _description; }
            set { SetValue(ref _description, value, "Description"); }
        }

        private string _appStoreUrl;
        [XmlElement("urltoappstore")]
        public string AppStoreUrl
        {
            get { return _appStoreUrl; }
            set { SetValue(ref _appStoreUrl, value, "AppStoreUrl"); }
        }

        private string _category;
        [XmlElement("category")]
        public string Category
        {
            get { return _category; }
            set { SetValue(ref _category, value, "Category"); }
        }

        private string _publicationDate;
        [XmlElement("pub_date")]
        public string PublicationDate
        {
            get { return _publicationDate; }
            set { SetValue(ref _publicationDate, value, "PublicationDate"); }
        }




        private FreeContent _freeContent;
        [XmlElement("free")]
        public FreeContent FreeContent
        {
            get { return _freeContent ?? (_freeContent = new FreeContent()); }
            set { SetValue(ref _freeContent, value, "FreeContent"); }
        }

        private string _price;
        [XmlElement("price")]
        public string Price
        {
            get { return _price; }
            set { SetValue(ref _price, value, "Price"); }
        }

        private string _language;
        [XmlElement("language")]
        public string Language
        {
            get { return _language; }
            set { SetValue(ref _language, value, "Language"); }
        }
        private string _rssenabled;
        [XmlElement("rssenabled")]
        public string Rssenabled
        {
            get { return _rssenabled; }
            set { SetValue(ref _rssenabled, value, "Rssenabled"); }
        }
        
    }

    public class FreeContent : ModelViewObject
    {
        private string _isFree;
        [XmlAttribute("content")]
        public string IsFree
        {
            get { return _isFree; }
            set { SetValue(ref _isFree, value, "IsFree"); }
        }
    }

    public class PublicationCover : ModelViewObject
    {
        private string _urlToImage;
        [XmlElement("loc")]
        public string UrlToImage
        {
            get { return _urlToImage; }
            set { SetValue(ref _urlToImage, value, "UrlToImage"); }
        }
    }

    public class PublicationCoverBig : ModelViewObject
    {
        private string _urlToImageBig;
        [XmlElement("loc")]
        public string UrlToImageBig
        {
            get { return _urlToImageBig; }
            set { SetValue(ref _urlToImageBig, value, "UrlToImageBig"); }
        }
    }

       public class PublicationPreviewImage : ModelViewObject
       {
           private string _urlToPreviewImage;
           [XmlElement("loc")]
           public string UrlToPreviewImage
           {
               get { return _urlToPreviewImage; }
               set { SetValue(ref _urlToPreviewImage, value, "UrlToPreviewImage"); }
           }
       }
}


исходящий XML
Код

<?xml version="1.0" encoding="utf-8"?>
<package>
  <Store>
    <product ID="12">
      <ref>12</ref>
      <loc>12</loc>
      <image>
        <loc>12</loc>
      </image>
      <image_cover>
        <loc>12</loc>
      </image_cover>
      <image_preview>
        <loc>12</loc>
      </image_preview>
      <desc>12</desc>
      <urltoappstore>12</urltoappstore>
      <category>12</category>
      <pub_date>12</pub_date>
      <free content="12" />
      <price>12</price>
      <language>12</language>
    </product>
    <product ID="12">
      <ref>12</ref>
      <loc>12</loc>
      <image>
        <loc>12</loc>
      </image>
      <image_cover>
        <loc>12</loc>
      </image_cover>
      <image_preview>
        <loc>12</loc>
      </image_preview>
      <desc>12</desc>
      <urltoappstore>12</urltoappstore>
      <category>12</category>
      <pub_date>12</pub_date>
      <free content="12" />
      <price>12</price>
      <language>12</language>
    </product>
  </Store>
</package>


ТЕПЕРЮ НУЖНЫЙ XML
исходящий XML
Код

<?xml version="1.0" encoding="utf-8"?>
<package>
  <Store>
    <country id="country_id">  
      <strategic_business_unit id="construction">
        <business_unit id="Gebaeudetechnik">  
    <product ID="12">
      <ref>12</ref>
      <loc>12</loc>
      <image>
        <loc>12</loc>
      </image>
      <image_cover>
        <loc>12</loc>
      </image_cover>
      <image_preview>
        <loc>12</loc>
      </image_preview>
      <desc>12</desc>
      <urltoappstore>12</urltoappstore>
      <category>12</category>
      <pub_date>12</pub_date>
      <free content="12" />
      <price>12</price>
      <language>12</language>
    </product>
    <product ID="12">
      <ref>12</ref>
      <loc>12</loc>
      <image>
        <loc>12</loc>
      </image>
      <image_cover>
        <loc>12</loc>
      </image_cover>
      <image_preview>
        <loc>12</loc>
      </image_preview>
      <desc>12</desc>
      <urltoappstore>12</urltoappstore>
      <category>12</category>
      <pub_date>12</pub_date>
      <free content="12" />
      <price>12</price>
      <language>12</language>
    </product>
        </business_unit>   
      </strategic_business_unit>
    </country>
  </Store>
</package>


Т.е. необходимо добвить 3 ограждающих XML-тега
<business_unit>   
<strategic_business_unit>
<country>

Пробовал создавать отдельные объекты для каждого тега, но у меня проблема с 
Код

    [Serializable]
    [XmlRoot("package")]
    public class Publications : ModelViewObject
    {
        private readonly ObservableCollection<Publication> _publications = new ObservableCollection<Publication>();

        [XmlIgnore]
        public ObservableCollection<Publication> PublicationsCollection
        {
            get { return _publications; }
        }

        [XmlArray("Store")]
        public Publication[] PublicationArray
        {
            get { return _publications.ToArray(); }
            set
            {
                _publications.Clear();
                foreach (var galleryImage in value)
                    _publications.Add(galleryImage);
            }
        }
    }


ПОЖАЛУЙСТА, помогите решить проблему, очень нужно.  smile  smile  smile  smile  smile  smile 

Спасибо.


--------------------
<удалено администрацией форума>
PM MAIL WWW ICQ   Вверх
diadiavova
Дата 4.9.2012, 23:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Доктор Зло(диагност, настоящий, с лицензией и полномочиями)
****


Профиль
Группа: Модератор
Сообщений: 5821
Регистрация: 14.8.2008
Где: В Коньфпольте

Репутация: 31
Всего: 142



ZMaximI, я правильно понял задачу, ты хочешь, чтобы твои классы сериализовались в документ заданной структуры? Если да, то может воспользоваться утилитой xsd.exe  и сформировать код классов с ее помощью? Хотя, честно говоря, мне такой способ формирования документа кажется несколько странным. Сериализация нужна для сохранения объекта и его последующего восстановления. Если надо сериализованный документ как-то изменить, можно воспользоваться xslt. Ну, а так еще есть такой вариант
http://msdn.microsoft.com/ru-ru/library/sy...ueryresult=true


--------------------
Хочешь получить мудрый совет - читай подписи участников форумов.
Злой доктор Щасзаболит smile
PM   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Прежде чем создать тему, посмотрите сюда:
mr.DUDA
THandle

Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов.
Что делать если Вам помогли, но отблагодарить помощника плюсом в репутацию Вы не можете(не хватает сообщений)? Пишите сюда, или отправляйте репорт. Поставим :)
Так же не забывайте отмечать свой вопрос решенным, если он таковым является :)


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, mr.DUDA, THandle.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Общие вопросы по .NET и C# | Следующая тема »


 




[ Время генерации скрипта: 0.0718 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.