• XML dosyalarından Excel'e veri toplayın ve dışa aktarın. xls'i xml'ye dönüştürme

    XSD şemasına dayalı bir XML dosyası oluşturma görevi vardı. Forumlarda arama yapmak, sürecin anlaşılmamasıyla ilgili pek çok tartışmaya ve özü açıklayan yalnızca birkaç makaleye yol açtı. İnsanlar sorular sordu, çözüm için mücadele etti, ancak görev onlara yenik düştükten sonra, mekanizmayı tarif etmeden ortadan kayboldular. Bu yaratılışı teşvik etti basit açıklama işlem.
    Not: Çok fazla küfür etmeyin, amacım kesinlikle doğru terminolojiyi kullanarak bir tür bilimsel makale oluşturmak değil, sadece çok güçlü bir XML değişim mekanizmasını anlamaya yönelik ilk adımı atmaya yardımcı olmaktı.
    P.P.S. Makaleye eklenen indirme dosyasının, yalnızca XML dosyasının gerekli yapısının yalnızca bir bölümünü oluşturan bir boşluk olduğuna dikkat edilmelidir, çünkü. bu boşaltma ile işim doğası gereği oldukça eğiticiydi (kopyala önceki belge FCS web sitesine dışa aktarmak ve Excel dosyasının yalnızca tablolu kısmını indirmek için etkili çözüm) ve zaman eksikliği, yalnızca mükemmeliyetçilik hususlarına dayanarak tüm yapının oluşturulmasını bitirmeye izin vermedi.

    Böylece, Federal Gümrük Hizmetinin web sitesine kaydolduktan sonra, İhracatla ilgili İstatistiksel Raporlama Belgeleri oluşturmak için, Ticaret İdaresinin Mal ve Hizmet Satışı belgelerinden veri indirmeniz ve indirmek için bir dosya oluşturmanız gerektiği ortaya çıktı.

    İndirmek için iki seçenek vardır.

    İlk olarak: Tablo bölümünü şuradaki Ürünlerle yükleme: Excel dosyası(Bu seçenek, çalışan bir seçenek olarak seçildi, çünkü belgenin "Başlığını" işlemekle uğraşmanın gerekli olmadığı, ancak "Başlıkta" gerekli olanı değiştirerek bir öncekini kopyalayabileceğiniz avantajları vardı.

    İkincisi: FCS web sitesinden "Biçimler Albümü" biçiminde indirilen şemaya göre bir XML dosyası oluşturmak elektronik formlar belgeler". Albüm yeter çok sayıda XSD Şemaları. "Malların hareketi için istatistiksel muhasebe biçimi" şemasını buldular ve ek belgeler bunun için tip açıklamaları ile. Şemalar arşivdeki makaleye işlenerek eklenir.

    XSD şemalarını görüntülemek için ücretsiz Microsoft XML Notepad 2007 kullanıldı.

    Resimde, "Malların hareketi için istatistiksel muhasebe biçimi" XSD şemasına sahip ana dosya gösterilmektedir. Görüntü, onu anlamamız gereken XSD şemasının ana bloklarını vurgular.

    StaticFormType tipinin "xs: element" dalında belirtilen yapı ile dolu bir XML dosyası almamız gerektiği şemadan görülmektedir.

    Yapı oldukça karmaşık olabilir (bizim durumumuzda olduğu gibi). Doğrudan şubede bulunan, ayrı bir şubeye taşınan ve hatta başka bir dosyada bulunan tip açıklamalarıyla.

    Bu yapı StaticFormType türündedir ve bu yapı sırasıyla şunlardan oluşur: baz tipi BaseDocType, nesne kümesi farklı şekiller ve metin nitelikleri.

    BaseDocStyle temel türü başka bir dosyada (ve ad alanında) açıklanmıştır.
    .

    Bu dosya ayrıca bizim durumumuzda kullanılmayan birçok tür içerir.

    Şimdi 1C'de çalışmaya geçelim. Özetle, yapmamız gerekenler şu şekilde özetlenebilir:

    1. XDTO Fabrikası oluşturuldu

    OurXDTOFactory = CreateXDTOFactory(ArrayFullFileNamesWithXSDSchemas);

    2. Tüm karmaşık veri türleri, daha sonra dolduracağımız XDTO fabrikasında oluşturulur. oluşturulan dosya XML:

    StaticFormType = MyFactoryXDTO.Type("urn:customs.ru:Information:CustomsDocuments:StaticForm:5.4.0", "StaticFormType");

    Belirli bir türe dahil edilen veri türleri, özelliklerinin toplanmasından elde edilebilir:

    CUOrganizationType = StaticFormType.Properties.Get("Alıcı").Type; NameType = CUOrganizationType.Properties.Get("OrganizationName").Type; ShortNameType = CUOrganizationType.Properties.Get("ShortName").Type; LanguageCodeType = CUOrganizationType.Properties.Get("OrganizationLanguage").Type;

    3. Tüm karmaşık veri türleri oluşturulduğunda, bunları temel alarak oluştururuz XML yapısı XDTO Factory nesnelerinden oluşan dosya:

    StaticFormType_XDTOObject = MyXDTOFactory.Create(StaticFormType); // belgelerle toplama NewDocuments = MyXDTOFactory.Create(DocumentsType); NewDocuments.PrDocumentName = MyFactoryXDTO.Create(PrDocumentNameType, "İrsaliye"); NewDocuments.PrDocumentNumber = MyXDTOFactory.Create(PrDocumentNumberType, "123-sayı"); NewDocuments.PrDocumentDate = MyXDTOFactory.Create(PrDocumentDateType, "2014-10-05"); StaticFormType_XDTO.Documents.Add(NewDocuments);

    Aynı zamanda temel (basit tipler) detayları dolduruyoruz.

    4. Son olarak, XDTO Fabrikasındaki her şeyi bir dosyaya boşaltıyoruz:

    XMLFile = Yeni XMLWriter(); FileXML.OpenFile(DosyaAdı); FileXML.WriteDeclarationXML(); MyXDTOFactory.WriteXML(XMLFile, StaticFormType_XDTOObject); FileXML.Close();

    Not: Arşiv, XML'de boşaltılan boş bir dosya (yalnızca dosyayı doldurmanın tüm durumlarını yansıtan bazı ayrıntılar oluşturulur) ve XSD şemaları içerir.

    Tüm dosyaları bir dizine sıkıştırın.

    İçinde XML oluşturulacak.

    Bir organizasyonda muhasebe sadece 1C: Enterprise platformuna dayalı çözümlerde değil, diğer yazılım sistemlerinde de (Galaktika, Parus, SAP vb.) Tutulabilir. Bu durumda, iki uygulamayı entegre etme görevleri ortaya çıkar.

    Örneğin, bazı uygulamaların (buna "X" diyelim) bir yapılandırma belgeleri listesini okuması gerekir. HAKKINDA pratik kullanım böyle bir sorunun çözümünden bahsetmeyeceğiz, sadece en uygun ve evrensel yol böyle bir durumda, belge listesi şu adrese yüklenecektir: XML biçimi.

    Çoğu uygulama onunla çalışabildiğinden, bu formatı kullanan değişim evrenseldir. 1C:Enterprise'tan bir XML dosyasına yapılandırma belgeleri listesini nasıl yükleyebileceğinizi görelim.

    XML'e Aktar

    Ve böylece, ana şeye geçelim. Belge meta verileri listesini yinelememiz ve listeyi bir XML dosyasında oluşturmamız gerekiyor. Aşağıdaki ekran görüntüsü, bir XML dosyası oluşturmak için kullanılan algoritmayı gösterir:

    CreateXML() İşlevi Dışa Aktarma // geçici dosyanın adını al Yol = GetTemporaryFileName() ; // "WriterXML" sınıfını başlat Girdi = Yeni GirdiXML; // Yazmak için geçici bir dosya aç- 8 " ) ; // XML dosya bildirimini yaz Kayıt. WriteDeclarationXML() ; // Yazmak. YazElementBaşlat(" BelgelerYapılandırmalar" ) ; // İlk eleman // Dosya oluşturma tarihi ile ilk elemanın niteliği Kayıt. WriteAttribute(" oluşturulan " , Format(CurrentDate() , " DF = yyyy-AA- ddThh:dd:ss; DLF= CE" ) ) ; // Her yapılandırma belgesi için bir öğe yazın. Metnin içine belgenin adını koyuyoruz. Her Meta Veri Belgesi İçin. Belgeler Döngü Kaydı. WriteItemStart("Belge"); Kayıt. WriteText(Belge Adı) ; Kayıt. WriteEndElement() ; Döngü Sonu; // İlk elemanı yazmayı bitir Kayıt. WriteEndElement() ; Kayıt. Kapalı() ; // dosyayı kapat // Dosyanın ikili verilerini alın ve geçici depolamaya koyun BinaryData = Yeni BinaryData(Yol) ; Adres = PlaceInTempStorage(BinaryData, New UniqueIdentifier) ​​​​; İade adresi; // Depodaki dosyanın adresini döndür Bitiş İşlevleri

    Oluşturulan her öğe doğru şekilde tamamlanmalıdır. "WriteStartElement()" methodu çalıştırıldıktan sonra mutlaka "WriteEndElement" methodu çalıştırılmalıdır, aksi takdirde XML dosyasının yapısı hatalı olacaktır.

    XML dosyaları oluşturmak için genel şablon aşağıdaki sıradır:

    // 1. "XML Yazma" sınıfını başlatın Girdi = Yeni GirdiXML; // 2. Yazmak için geçici bir dosya açın Kayıt. OpenFile(Yol, "UTF - 8 " ) ; // 3. XML dosyasının bildirimini yazın Kayıt. WriteDeclarationXML() ; // // 4. ++ XML dosyasının içeriğini yazın Kayıt. WriteElementStart("ElementXML" ) ; Kayıt. WriteEndElement() ; // -- XML ​​dosyasının içeriğini yazın // 5. Dosyayı kapatın Kayıt. Kapalı() ;

    Bu beş adım, neredeyse tüm XML dosyalarını oluşturur.

    Örneğimizde, oluşturulan dosya ikili verilere dönüştürülür ve "CreateXML" işlevinin çağrıldığı yere geri döner. Bu dosya daha sonra dosya sistemine yazılabilir.

    Yukarıdaki ekran görüntüsünde yüklenen dosyanın bir örneğini görebilirsiniz.

    Üçüncü Taraf Uygulaması

    Örneğin, üzerinde bir uygulama oluşturdum. NET Çerçevesiüçüncü taraf bir uygulamada bir XML dosyasının okunduğunu göstermek için.

    Program oluşturulan dosyayı okur ve belgeleri bir liste şeklinde görüntüler:

    Kendiniz deneyebilirsiniz, uygulama yazının sonundaki linkten indirilebilir.

    çok yönlülük

    XML biçimi, arasındaki çoğu iletişim yapılandırmasında kullanılır. uygulamalı çözümler 1C:Enterprise platformunda. Yaygın olarak kullanılan diğer bir iletişim yöntemi de COM bağlantısıdır. XML, evrensel olarak adlandırılmayı hak eden hemen hemen her uygulamayla değiş tokuş yapmanızı sağlar.

    İndirilenler:

    XML dosya okuyucu uygulaması.

    Bir XML dosyasının oluşumu işleniyor.


    Uzun zamandır XML dosyalarıyla çalışıyorum, ancak şimdi merak ettim: Nasıl düzenli araçlar MS Excel'de XML dosyaları oluşturma ve düzenleme? Excel, çeşitli verileri oluşturmak, düzenlemek ve işlemek için kullanışlı ve sezgisel bir araçtır. Excel okulda öğrenilir ve muhtemelen bir bilgisayarda nasıl çalışılacağını bilen ve Excel'de çalışmanın temellerini bilmeyen hiç kimse yoktur. Bu nedenle bence önerilebilecek en uygun araç budur. sıradan kullanıcılar için veri dosyaları oluşturmak ve düzenlemek için çeşitli uygulamalar, web uygulamaları dahil. Evde MS Excel 2013 yüklü ve örneğini kullanarak Excel'de bir XML veri dosyası oluştururken yapılması gereken basit prosedürleri anlatacağım. Bence daha önce Excel sürümleri bu da işe yarayacak. Bir XML veri dosyası oluşturmak için birkaç basit adım atalım. Bir olay veri dosyası oluşturma örneğinde bunları ele alalım.

    1. Öncelikle Excel'de veri yapısına uygun bir veri tablosu oluşturmanız ve doldurmanız gerekir. Lütfen bunun için menü öğesini kullanın Ekle/Tablo.

    2. XML dosyasının şemasını oluşturalım. Bunun için Metin düzeltici aşağıdaki satırları girin ve bir dosyaya kaydedin.

    XHTML

    0 0 0 0 Kutsal Mesih'in Dirilişi. Paskalya 0 0 -7 0 -7 Rab'bin Kudüs'e girişi 1

    0

    0

    0

    0

    Kutsal Mesih'in Dirilişi. Paskalya

    0

    0

    -7

    0

    -7

    Rab'bin Kudüs'e girişi

    1

    3. Şimdi sekmeyi açın Geliştirici, düğmesine basın Kaynak ve XML kaynak dosyasını belirtin. Gerekirse, menü öğesini etkinleştirin Geliştirici Excel Tercihlerinde.

    4. Elemanları karşılık gelen sütun başlıklarına sürükleyerek şemanın elemanlarını ve tablonun sütunlarını eşleştirmek için kalır.

    5. Ve son adım: kullanarak tablo verilerini bir XML dosyasına aktarın. bağlam menüsü. Masanın herhangi bir hücresinde durun, farenin sağ tuşuna basın, seçin XML/Dışa Aktar... ve XML dosyasını istenen adla kaydedin.

    Daha sonra düzenlemek ve eklemek için Excel dosyasını kaydedin. Aşağıdaki paragraflarda 1.-4. yapılmasına gerek kalmayacak!

    Not: Bu banal notu neden yazdım? Birincisi, kendiniz unutmamak için ve ikincisi, bu bilgilerin kullanıcılar için faydalı olacağını düşünüyorum. sonraki sürüm 0.6 ;-)

    Bir yerde çalışırken oldukça tipik bir görevden bahsetmek istiyorum. xml yani yaratılış xml var olana dayanmaktadır. Bu operasyon aşağıdakiler gibi ek görevlerin çözüleceği birkaç aşamadan oluşacaktır:

    • yaratılış xml temelli XSD ve tersi.
    • Nesnelerin seri hale getirilmesi ve seri hale getirilmesi.
    • Gelecekteki serileştirme için bir sınıf oluşturma xml veya XSD.
    Başlamadan önce, okuyucunun kelimelere aşina olmasını planlıyorum. xml Ve XSD. İlişkin xml, Bence bununla ilgili bir sorun yok, ama gelince XSD Ne olduğunu merak ediyor olabilirim. Kısacası, o zaman:
    XSD tarif etmek için bir dildir xml. Ve bu açıklamayı içeren dosyanın içeriğine bakarsanız, o zaman şu soru ortaya çıkar: Görünüşte bariz olan etiketlerinizi neden açıklayın? xml? Ancak, bazı harici sistemlerle bütünleştiğinizi ve veri alışverişi için formatı kullanmak istediğinizi hayal edin. xml. İşte burada XSD her öğe için adını, olası niteliklerini, zorunlu alanları veya niteliklerini tanımlamanıza izin verir, bir etiketin içeriğinin yalnızca bir iç öğe içerebileceğini açıkça belirtin ( ) ve artık yok veya bir düğüm bir dizi öğeye sahip olabilir (< bir> ... ). Ne zaman harici sistem senin, o zaman sorun olmayabilir, ama o zaman dış organizasyon, Daha sonra verilen açıklama başından sonuna kadar XSD, biçime sahip bir anlaşmazlık çözme aracı olacaktır ve ayrıca yardımcı programları kullanarak herhangi birinin uygunluğunu kontrol edebilirsiniz. xml orijinal biçim.
    Peki damgalamayı öğrenmek için ne yapacağız? xml kriterinize göre mi? Her şeyi sırayla anlatacağım.

    Mevcut:
    bir çeşit XML (xmlfile.xml) kaydedilen Metin formatı dosyalamak. Metin aşağıdadır:

    < catalog > < book id = " bk101 " > < author >Gambardella, Matthew < title >XML Geliştirici Kılavuzu < genre >bilgisayar < price > 44.95 < publish_date > 2000-10-01 < description >XML ile uygulama oluşturmaya derinlemesine bir bakış. < book id = " bk102 " > < author >Ralli, Kim < title >gece yarısı yağmuru < genre >fantezi < price > 5.95 < publish_date > 2000-12-16 < description >Eski bir mimar, dünyanın kraliçesi olmak için kurumsal zombilerle, kötü bir büyücüyle ve kendi çocukluğuyla savaşır.

    Yeni bir tane oluşturma adımları:

    1. İlk önce yardımcı programı kullanma XSD.exe veya kullanarak çevrimiçi hizmetler("xml to xsd" için arama yapın, bunlardan biri www.freeformatter.com/xsd-generator.html), mevcut olanlardan üreteceğiz xml onun ilkel XSD Tanım. Çıktıda, tamamen, otomatik olarak oluşturulmuş bir çıktı.xsd zaten kullanılabilir olan ancak tamamlanmamış olabilecek bir dosya.
    2. Sonraki, dayalı çıktı.xsd , C# sınıfları oluşturulacak xmlclass.cs Daha sonra projemize ekliyoruz. Kullanarak bir sınıf oluşturabilirsiniz. xsd.exe, veya xsd2 kodu yardımcı program veya herhangi bir çevrimiçi hizmet.
    3. Artık dosya sınıflarını kullanmaya hazırız. xmlclass.cs. Bu nedenle, örnekleri oluşturur ve verilerle doldururuz xml sınıfı ve ardından, seri hale getirme işlemini kullanarak nesneleri şuna dönüştüreceğiz: xml dize ve ardından kaydedin yeni dosya. Böylece elde ederiz xml mevcut olana göre.
    Başlayalım!

    Adım 1: XML'den XSD oluşturun.

    Yani, işte kendim kullandığım yöntemler:
    1. Yarar xsd.exe- yaratıcı Microsoft.
    2. Yarar xsd2code.exe - üçüncü taraf uygulaması her şeyi aynı şekilde yapabilen xsd.exe, ancak doğrudan indirilebilir (en şu an den ödenecek hale geldi duruşma dönem).
    3. Herhangi bir çevrimiçi hizmetin kullanımı.
    almak için XSD.exe, herhangi bir Microsoft SDK'ları, teslimatta, gider bu başvuru. Ne yazık ki, şu anda kitlerindeki stüdyoların hiçbiri bu yardımcı programı içermiyor.

    Aşağıdakilerden birini indirmek ve yüklemek için bağlantı SDK:
    Windows 7 ve .NET Framework 4 için Windows SDK .

    Aramayı kullanalım ve dosyayı bulalım xsd.exe, bundan sonra (işimizi basitleştirmek için), diskin kök dizininde oluşturulan klasöre kopyalayın C:\xmltoxsd. Ardından, aynı klasöre kopyalıyoruz xmlfile.xml ve her şey başlamaya hazır.


    Sıyırmak " Komut satırı" (Başlat -> "Çalıştır" -> "cmd"), dizinimize gidin ve varsayılan parametrelerle çağırın xsd.exe, xmlfile.xml dosyamızı bir parametre olarak geçirerek:


    Ve yakınlarda bir dosyanın göründüğünü görüyoruz. xmlfile.xsd içerikli.


    Bu kadar! Bu eylemler, bir ilkel oluşturmak için yeterlidir XSDçalışmak için dosya. Ama şunu anlamakta fayda var xsd.exe, diğer herhangi bir yardımcı program gibi, alanlarınızın türleri hakkında hiçbir şey bilmez (bu nedenle, alan türü neredeyse her zaman sicim), ayrıca tüm özellik ve parametre varyasyonları hakkında. Diğer bir deyişle, eğer bazı etiketler sizin dosyanızda bir özniteliğe sahip değilse. xml, o zaman açıklamada olmayacak. Bu yüzden xml mümkün olduğu kadar eksiksiz olmalıdır ve öğenin birkaç alt alan içermesi durumunda, en az iki tane eklemek daha iyidir, böylece xsd.exe bunun bir koleksiyon olduğunu anladı.

    Sözdizimi XSDçok karmaşık değil, bu yüzden yeterince ciddi bir açıklama yazarsanız, bir dosyayla çalışmanız gerekebilir.

    Adım 2. XSD'den Sınıf Oluşturma.

    C#'ta bir sınıf oluşturmak için yeniden kullanmamız gerekiyor xsd.exe ancak farklı bir parametre ile /sınıflar, bizim yolu geçerek xmlfile.xsd.


    Yürütmeden sonra, içeriği aşağıda sıkıştırılmış biçimde verilen xmlfile.cs dosyası görünecektir:


    Gördüğünüz gibi, iç eleman için katalog sınıf oluşturuldu katalogKitap, alanları içindeki alanlara karşılık gelen xml ve alan İD nitelik olarak işaretlenmiştir. xsd.exe içinde ne olduğunu doğru anladı katalog bir kitap koleksiyonu saklanır, bu nedenle özellik ortaya çıktı Öğeler, alt koleksiyonu doldurmak için.
    Yorum: xsd.exe ortaya çıkan sınıflara ve alanlara nasıl yorum ekleneceğini bilmiyor. Açıklamada XSD adlı bir öğe vardır.< xs:annotation > , en sık içeren< xs:documentation >, alanın açıklamasının yerleştirildiği yer. Teorik olarak, /// açıklamasına yerleştirilmelidir, ancak şu anda xsd.exe açıklamaya metin eklemeyi reddediyor, bu nedenle aşağıdaki gibi alternatiflere başvurmak gerekiyor: xsd2 kodu veya çevrimiçi hizmetler.

    Adım 3. XML'deki nesnelerin seri hale getirilmesi.

    Ortaya çıkan sınıflar dosyada xmlfile.cs. Ardından, içeriği veya dosyanın kendisi projeye eklenir. görsel stüdyo , bundan sonra onunla çalışabilirsiniz. Tanıtım amaçlı bir kitap nesnesi oluşturacağım, ardından onu şu biçimde bir dosyaya kaydedeceğim: xml.

    Özel geçersiz Örnek() ( // İlk kitabı oluştur var kitap1 = yeni katalogKitap () ( yazar = "Kral" , açıklama = "Çok ilginç kitap" , tür = "Fantezi" , fiyat = 22.ToString(), id = "42011" , başlık = "It" }; !} // İkinci kitabı oluştur var kitap2 = yeni katalogKitap () (yazar = "O"Brien, Tim" , açıklama = "Microsoft"un .NET girişimi, bu derin programcının referansında ayrıntılı olarak inceleniyor.", tür = "Bilgisayar" , fiyat = 36.ToString(), id = "30012" , başlık = "Microsoft .NET: Programlama İncil" }; // Yukarıdaki iki kitabı içeren dizinin kök öğesini oluşturun var katalog = yeni katalog () ( Öğeler = yeni ( kitap1, kitap2 ) ) ); // XML nesne kataloğu içerir var xmlCatalog = Serileştir(katalog); // Dizeyi dosyaya yaz // YAPILACAKLAR Gösteri amaçlı yapılmıştır. Akışı bir dosyaya geçirmek için tercihen Serialize yöntemini çağırmak Dosya .WriteAllText("Output.xml" , xmlCatalog); ) özel dizi Serileştirme (Tipi kaynakObject) ( if (kaynakObject == null ) ( dönüş dizesi .Empty; ) // XML dizisine dönüştürmek için XmlSerializer'ı kullanın var xmlserializer = new XmlSerializer(typeof(TType)); var stringWriter = yeni StringWriter(); kullanarak (var writeWriter = XmlWriter .Create(stringWriter, new XmlWriterSettings() () ( Indent = true ))) ( xmlserializer.Serialize(writer, sourceObject); return stringWriter.ToString(); ) ) Çalıştırıp açtıktan sonra çıktı.xml istediğimiz gibi kaydettiğimizi görebilirsiniz (Alt dosya - " Kod tarafından oluşturuldu").