Scrivere file xml seguendo uno schema xsd

di il
6 risposte

Scrivere file xml seguendo uno schema xsd

Ciao ragazzi,

volevo chiedervi qualche aiuto..
devo creare dei file xml partendo da dati in Excel.

Ho trovato il file XSD relativo allo standard che devo creare.
Ho letto che posso trasformare un file xsd in classi per poi utilizzare per scrivere il file.
è una buona strada o conviene seguirne altre?
tra l'altro non riesco a convertirlo con xsd.exe, mi dice che l'elemento "Elemento 'http://www.w3.org/2001/XMLSchema:restriction' mancante."

lo standard proviene da questo sito https://github.com/buildingsmart/ids?tab=readme-ov-file
mi conviene utilizzare un altro metodo?

6 Risposte

  • Re: Scrivere file xml seguendo uno schema xsd

    18/02/2025 - hantrax ha scritto:

    Ho letto che posso trasformare un file xsd in classi per poi utilizzare per scrivere il file.

    E' una delle strade.

    18/02/2025 - hantrax ha scritto:

    tra l'altro non riesco a convertirlo con xsd.exe, mi dice che l'elemento "Elemento 'http://www.w3.org/2001/XMLSchema:restriction' mancante."

    Qual è la sintassi che usi per il comando xsd?

  • Re: Scrivere file xml seguendo uno schema xsd

    Ciao,

    grazie per la risposta

    allora la sintassi è questa:
    xsd.exe c:\isd\isd.xsd /classes /language:vb /out:c:\isd\

    Per ora stavo provando in questo modo senza il file xsd, ma quando faccio leggere il file xml al programma che lo elabora mi dice che è corrotto

    Dim document As XDocument = <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
                                <ids:ids xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://standards.buildingsmart.org/IDS http://standards.buildingsmart.org/IDS/1.0/ids.xsd" xmlns:ids="http://standards.buildingsmart.org/IDS">
                                    <ids:info>
                                        <ids:title><%= "IFC2X3 IFC4 IFC4X3_ADD2" %></ids:title>
                                        <ids:author><%= "IFC2X3 IFC4 IFC4X3_ADD2" %></ids:author>
                                        <ids:date><%= "IFC2X3 IFC4 IFC4X3_ADD2" %></ids:date>
                                    </ids:info>
    
                                    <ids:specifications>
                                        <ids:specification ifcVersion=<%= "IFC2X3 IFC4 IFC4X3_ADD2" %> name=<%= "Pset_Generale" %> description=<%= "Controlla se è presente il Pset Generale su IFCSite" %>>
                                            <ids:applicability minOccurs="1" maxOccurs="unbounded">
                                                <ids:entity>
                                                    <ids:name>
                                                        <ids:simpleValue><%= "IFC2X3 IFC4 IFC4X3_ADD2" %></ids:simpleValue>
                                                    </ids:name>
                                                </ids:entity>
                                            </ids:applicability>
                                            <ids:requirements>
                                                <ids:property cardinality="required">
                                                    <ids:propertySet>
                                                        <ids:simpleValue><%= "Pset_generale" %></ids:simpleValue>
                                                    </ids:propertySet>
                                                    <ids:baseName>
                                                        <ids:simpleValue><%= "SDP" %></ids:simpleValue>
                                                    </ids:baseName>
                                                </ids:property>
                                            </ids:requirements>
                                        </ids:specification>
                                    </ids:specifications>
                                </ids:ids>

    questo invece è un file generato da un altro servizio online e che funziona correttamente
    01-PED_Giampilieri.ids

  • Re: Scrivere file xml seguendo uno schema xsd

    19/02/2025 - hantrax ha scritto:

    Per ora stavo provando in questo modo senza il file xsd, ma quando faccio leggere il file xml al programma che lo elabora mi dice che è corrotto

    Ma il codice che hai riportato è esattamente quello che hai scritto?

    Prendo questa parte:

                                        <ids:info>
                                            <ids:title><%= "IFC2X3 IFC4 IFC4X3_ADD2" %></ids:title>
                                            <ids:author><%= "IFC2X3 IFC4 IFC4X3_ADD2" %></ids:author>
                                            <ids:date><%= "IFC2X3 IFC4 IFC4X3_ADD2" %></ids:date>
                                        </ids:info>

    Perché hai usato quelle parti con questa sintassi? <%= "IFC2X3 IFC4 IFC4X3_ADD2" %>
    Perché non riportare quel valore (IFC2X3 IFC4 IFC4X3_ADD2) direttamente?

    Non mi spiego il motivo di parecchie scelte.

    Se il programma che legge il file XML dice che è "corrotto", controlla bene che il file XML sia ben formato facendolo validare con qualche tool apposito, oppure verifica se il programma adduce anche altre motivazioni.

    L'impressione che ho - e mi pare appunto una impressione, ma molto forte - è che qui si stia prendendo un po' la scorciatoia assemblando cose prese in giro nel tentativo di raffazzonare una procedura che funziona, e purtroppo l'XML richiede una certa precisione (è apprezzato - si fa per dire - e diffuso anche per quello).

    Fai un "escursus" sulla generazione di file XML in .NET e sull'uso di Schema XSD per la validazione, aiutandoti anche con Visual Studio, tramite qualche ricerca su Google o domanda ben posta a ChatGPT e simili (ponendo i tuoi dubbi e verificando le risposte).

    In sintesi, non andare comunque a caso (o quasi). :)

  • Re: Scrivere file xml seguendo uno schema xsd

    Ero partito da un esempio

    sono riuscito a farlo funzionare...
    non volevo cercare una scorciatoia, non ho mai messo le mani su xml e cerco di trovare una via corretta per andare avanti
    pensavo che leggendo lo schema fosse più semplice creare le varie voci

  • Re: Scrivere file xml seguendo uno schema xsd

    19/02/2025 - hantrax ha scritto:

    sono riuscito a farlo funzionare...

    Quindi alla fine l'errore qual era?

  • Re: Scrivere file xml seguendo uno schema xsd

    Era un problema di formattazione

    ora voglio cercare di creare le classi partendo dal file xsd...

Devi accedere o registrarti per scrivere nel forum
6 risposte