
Опытный
 
Профиль
Группа: Участник
Сообщений: 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); } } }
|
ПОЖАЛУЙСТА, помогите решить проблему, очень нужно. Спасибо.
--------------------
<удалено администрацией форума>
|