Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

recuperer les infos contenues dans un schema xsd

3 réponses
Avatar
Helter Skelter
Bonjour :)

j'ai besoin de connaitre le contenu exact d'un fichier xsd pour pouvoir
creer dynamiquement les champs me permettant de saisir un enregistrement
contenant un champs xml.
j'ai besoin de recuperer le nom des champs et leurs caracteristiques
(string/date/entier)

je sais maintenant lire le contenu d'un champs xml d'une table sql server
2005 en dissociant le nom des noeuds de leurs valeurs.

' les caracteristiques
Select Case (xmlRdr.NodeType)
Case System.Xml.XmlNodeType.DocumentType
' zone = xmlRdr.Name + " " + xmlRdr.Depth.ToString + " : "
zone = xmlRdr.Name + " : "
zone.Replace("-", " ")

Case System.Xml.XmlNodeType.Text
' bldr.Append((zone + xmlRdr.Value + "<br />"))
myAL.Add(zone + xmlRdr.Value)
End Select

cela fait exactement ce que je recherche mais...

je n'arrive pas a faire la meme chose des que j'attaque un flux(?) xsd !
précision mon schema n'est pas un fichier xsd mais un champs que je recupere
sur sql server
via cette requette

SELECT XML_SCHEMA_NAMESPACE(sch.name, xsd.name)
FROM sys.xml_schema_collections AS xsd
JOIN sys.schemas AS sch ON xsd.schema_id = sch.schema_id
WHERE xsd.name = 'SchemaXML_4x4'

je tente avec cette methode

Dim cmdSql As String
cmdSql = "SELECT XML_SCHEMA_NAMESPACE(sch.name, xsd.name) FROM
sys.xml_schema_collections AS xsd "
cmdSql = cmdSql + "JOIN sys.schemas AS sch ON xsd.schema_id = sch.schema_id
WHERE xsd.name = '"
cmdSql = cmdSql + Session("dropSelect") + "'" 'le drop select recupere le
nom du schema contenu dans sql server 2005

Dim xml As SqlXml
Dim xmlRdr As System.Xml.XmlReader

Dim conn As SqlConnection = New
SqlConnection(ConfigurationManager.ConnectionStrings("cs_vehicule").ConnectionString)
conn.Open()

Dim cmd As SqlCommand = New SqlCommand(cmdSql, conn)
Dim rdr As SqlDataReader = cmd.ExecuteReader
While rdr.Read

xml = rdr.GetSqlXml(0) ' (xx) = le numero du champs xml a traiter (dans
cette base c'est le 1er en partant de 0)

xmlRdr = xml.CreateReader
While xmlRdr.Read

Dim schema As XmlSchema

schema = XmlSchema.Read(xmlRdr, Nothing)
LblSchema.Text = schema.Id

Dim schemaObject As XmlSchemaObject
For Each schemaObject In schema.Items
If schemaObject.GetType() Is GetType(XmlSchemaElement) Then
Dim ElementType As XmlSchemaElement = CType(schemaObject,
XmlSchemaElement)
LblSchema.Text = LblSchema.Text + ElementType.Name.ToString + "<br/>"

Dim schemaSequence As XmlSchemaSequence
For Each schemaSequence In schema.Elements
Dim SequenceType As XmlSchemaSequence = CType(schemaObject,
XmlSchemaSequence)
LblSchema.Text = LblSchema.Text + SequenceType.Items.ToString(+"<br/>")
Next


End If

'voir si ceci affiche autre chose ! non cela n'affiche rien
LblSchema.Text = LblSchema.Text + schemaObject.ToString + "<br/>"

'ceci ne fait rien du tout !
'If schemaObject.GetType() Is GetType(XmlSchemaSequence) Then
' Dim SequenceType As XmlSchemaSequence = CType(schemaObject,
XmlSchemaSequence)
' LblSchema.Text = LblSchema.Text +
SequenceType.Items.ToString(+"<br/>")
'End If

'ceci ne fait rien du tout !
'If schemaObject.GetType() Is GetType(XmlSchemaSimpleType) Then
' Dim simpleType As XmlSchemaSimpleType = CType(schemaObject,
XmlSchemaSimpleType)
' LblSchema.Text = LblSchema.Text + simpleType.Name.ToString + " " +
simpleType.Datatype.ValueType.ToString()
'End If

'ceci ne fait rien du tout !
'If schemaObject.GetType() Is GetType(XmlSchemaComplexType) Then
' Dim complexType As XmlSchemaComplexType = CType(schemaObject,
XmlSchemaComplexType)
' LblSchema.Text = LblSchema.Text + complexType.Name + " " +
complexType.Datatype.ValueType.ToString()
' LblSchema.Text = LblSchema.Text +
complexType.BaseXmlSchemaType.ToString() + "<br/>"
'End If
Next schemaObject
End While
xmlRdr.Close()

End While
rdr.Close()
conn.Close()

le programme ci dessus affiche bien un resultat mais pas le reste de mon
schema...
COMMENTAIRES
CONSOMMATION
OPTIONS
PERSONNALISATION
items

mais pas le contenu à l'interieur de ces zones



Mon xsd est peut-etre mal formé ?
voici celui des 4x4 servant à mes tests

<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns:t="http://zed.org/4x4.xsd" targetNamespace="http://zed.org/4x4.xsd"
elementFormDefault="qualified">
<xsd:element name="COMMENTAIRES">
<xsd:complexType>
<xsd:complexContent>
<xsd:restriction base="xsd:anyType">
<xsd:sequence>
<xsd:element name="Commentaire" type="xsd:string" />
</xsd:sequence>
</xsd:restriction>
</xsd:complexContent>
</xsd:complexType>
</xsd:element>
<xsd:element name="CONSOMMATION">
<xsd:complexType>
<xsd:complexContent>
<xsd:restriction base="xsd:anyType">
<xsd:sequence>
<xsd:element name="ville" type="xsd:string" />
<xsd:element name="route" type="xsd:string" />
<xsd:element name="mix" type="xsd:string" />
</xsd:sequence>
</xsd:restriction>
</xsd:complexContent>
</xsd:complexType>
</xsd:element>
<xsd:element name="OPTIONS">
<xsd:complexType>
<xsd:complexContent>
<xsd:restriction base="xsd:anyType">
<xsd:sequence>
<xsd:element name="boite-auto" type="xsd:string" />
<xsd:element name="regulateur-vitesse" type="xsd:string" />
<xsd:element name="Sièges-av-chauffants" type="xsd:string" />
</xsd:sequence>
</xsd:restriction>
</xsd:complexContent>
</xsd:complexType>
</xsd:element>
<xsd:element name="PERSONNALISATION">
<xsd:complexType>
<xsd:complexContent>
<xsd:restriction base="xsd:anyType">
<xsd:sequence>
<xsd:element name="calandre-interchangeable" type="xsd:string"
/>
<xsd:element name="bluetooth" type="xsd:string" />
</xsd:sequence>
</xsd:restriction>
</xsd:complexContent>
</xsd:complexType>
</xsd:element>
<xsd:element name="items">
<xsd:complexType>
<xsd:complexContent>
<xsd:restriction base="xsd:anyType">
<xsd:sequence>
<xsd:element ref="t:OPTIONS" minOccurs="0" maxOccurs="unbounded"
/>
<xsd:element ref="t:CONSOMMATION" minOccurs="0"
maxOccurs="unbounded" />
<xsd:element ref="t:PERSONNALISATION" minOccurs="0"
maxOccurs="unbounded" />
<xsd:element ref="t:COMMENTAIRES" minOccurs="0"
maxOccurs="unbounded" />
</xsd:sequence>
</xsd:restriction>
</xsd:complexContent>
</xsd:complexType>
</xsd:element>
</xsd:schema>

j'ai beaucoup cherché notament sur msdn2
http://msdn2.microsoft.com/fr-fr/library/system.xml.schema.xmlschema(VS.80).aspx
et pages suivantes

je suis bloqué

qui a une piste ?

3 réponses

Avatar
Paul Bacelar
C'est un peu trop chevelu pour moi ;-).

Peut-tu nous donner un cas plus simple.

Peut-tu nous donner le type fourni au runtime par "schemaObject.GetType".
--
Paul Bacelar
MVP VC++


"Helter Skelter" wrote in message
news:45ae2b44$0$27387$
Bonjour :)

j'ai besoin de connaitre le contenu exact d'un fichier xsd pour pouvoir
creer dynamiquement les champs me permettant de saisir un enregistrement
contenant un champs xml.
j'ai besoin de recuperer le nom des champs et leurs caracteristiques
(string/date/entier)

je sais maintenant lire le contenu d'un champs xml d'une table sql server
2005 en dissociant le nom des noeuds de leurs valeurs.

' les caracteristiques
Select Case (xmlRdr.NodeType)
Case System.Xml.XmlNodeType.DocumentType
' zone = xmlRdr.Name + " " + xmlRdr.Depth.ToString + " : "
zone = xmlRdr.Name + " : "
zone.Replace("-", " ")

Case System.Xml.XmlNodeType.Text
' bldr.Append((zone + xmlRdr.Value + "<br />"))
myAL.Add(zone + xmlRdr.Value)
End Select

cela fait exactement ce que je recherche mais...

je n'arrive pas a faire la meme chose des que j'attaque un flux(?) xsd !
précision mon schema n'est pas un fichier xsd mais un champs que je
recupere sur sql server
via cette requette

SELECT XML_SCHEMA_NAMESPACE(sch.name, xsd.name)
FROM sys.xml_schema_collections AS xsd
JOIN sys.schemas AS sch ON xsd.schema_id = sch.schema_id
WHERE xsd.name = 'SchemaXML_4x4'

je tente avec cette methode

Dim cmdSql As String
cmdSql = "SELECT XML_SCHEMA_NAMESPACE(sch.name, xsd.name) FROM
sys.xml_schema_collections AS xsd "
cmdSql = cmdSql + "JOIN sys.schemas AS sch ON xsd.schema_id =
sch.schema_id WHERE xsd.name = '"
cmdSql = cmdSql + Session("dropSelect") + "'" 'le drop select recupere le
nom du schema contenu dans sql server 2005

Dim xml As SqlXml
Dim xmlRdr As System.Xml.XmlReader

Dim conn As SqlConnection = New
SqlConnection(ConfigurationManager.ConnectionStrings("cs_vehicule").ConnectionString)
conn.Open()

Dim cmd As SqlCommand = New SqlCommand(cmdSql, conn)
Dim rdr As SqlDataReader = cmd.ExecuteReader
While rdr.Read

xml = rdr.GetSqlXml(0) ' (xx) = le numero du champs xml a traiter (dans
cette base c'est le 1er en partant de 0)

xmlRdr = xml.CreateReader
While xmlRdr.Read

Dim schema As XmlSchema

schema = XmlSchema.Read(xmlRdr, Nothing)
LblSchema.Text = schema.Id

Dim schemaObject As XmlSchemaObject
For Each schemaObject In schema.Items
If schemaObject.GetType() Is GetType(XmlSchemaElement) Then
Dim ElementType As XmlSchemaElement = CType(schemaObject,
XmlSchemaElement)
LblSchema.Text = LblSchema.Text + ElementType.Name.ToString + "<br/>"

Dim schemaSequence As XmlSchemaSequence
For Each schemaSequence In schema.Elements
Dim SequenceType As XmlSchemaSequence = CType(schemaObject,
XmlSchemaSequence)
LblSchema.Text = LblSchema.Text +
SequenceType.Items.ToString(+"<br/>")
Next


End If

'voir si ceci affiche autre chose ! non cela n'affiche rien
LblSchema.Text = LblSchema.Text + schemaObject.ToString + "<br/>"

'ceci ne fait rien du tout !
'If schemaObject.GetType() Is GetType(XmlSchemaSequence) Then
' Dim SequenceType As XmlSchemaSequence = CType(schemaObject,
XmlSchemaSequence)
' LblSchema.Text = LblSchema.Text +
SequenceType.Items.ToString(+"<br/>")
'End If

'ceci ne fait rien du tout !
'If schemaObject.GetType() Is GetType(XmlSchemaSimpleType) Then
' Dim simpleType As XmlSchemaSimpleType = CType(schemaObject,
XmlSchemaSimpleType)
' LblSchema.Text = LblSchema.Text + simpleType.Name.ToString + " " +
simpleType.Datatype.ValueType.ToString()
'End If

'ceci ne fait rien du tout !
'If schemaObject.GetType() Is GetType(XmlSchemaComplexType) Then
' Dim complexType As XmlSchemaComplexType = CType(schemaObject,
XmlSchemaComplexType)
' LblSchema.Text = LblSchema.Text + complexType.Name + " " +
complexType.Datatype.ValueType.ToString()
' LblSchema.Text = LblSchema.Text +
complexType.BaseXmlSchemaType.ToString() + "<br/>"
'End If
Next schemaObject
End While
xmlRdr.Close()

End While
rdr.Close()
conn.Close()

le programme ci dessus affiche bien un resultat mais pas le reste de mon
schema...
COMMENTAIRES
CONSOMMATION
OPTIONS
PERSONNALISATION
items

mais pas le contenu à l'interieur de ces zones



Mon xsd est peut-etre mal formé ?
voici celui des 4x4 servant à mes tests

<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns:t="http://zed.org/4x4.xsd" targetNamespace="http://zed.org/4x4.xsd"
elementFormDefault="qualified">
<xsd:element name="COMMENTAIRES">
<xsd:complexType>
<xsd:complexContent>
<xsd:restriction base="xsd:anyType">
<xsd:sequence>
<xsd:element name="Commentaire" type="xsd:string" />
</xsd:sequence>
</xsd:restriction>
</xsd:complexContent>
</xsd:complexType>
</xsd:element>
<xsd:element name="CONSOMMATION">
<xsd:complexType>
<xsd:complexContent>
<xsd:restriction base="xsd:anyType">
<xsd:sequence>
<xsd:element name="ville" type="xsd:string" />
<xsd:element name="route" type="xsd:string" />
<xsd:element name="mix" type="xsd:string" />
</xsd:sequence>
</xsd:restriction>
</xsd:complexContent>
</xsd:complexType>
</xsd:element>
<xsd:element name="OPTIONS">
<xsd:complexType>
<xsd:complexContent>
<xsd:restriction base="xsd:anyType">
<xsd:sequence>
<xsd:element name="boite-auto" type="xsd:string" />
<xsd:element name="regulateur-vitesse" type="xsd:string" />
<xsd:element name="Sièges-av-chauffants" type="xsd:string" />
</xsd:sequence>
</xsd:restriction>
</xsd:complexContent>
</xsd:complexType>
</xsd:element>
<xsd:element name="PERSONNALISATION">
<xsd:complexType>
<xsd:complexContent>
<xsd:restriction base="xsd:anyType">
<xsd:sequence>
<xsd:element name="calandre-interchangeable" type="xsd:string"
/>
<xsd:element name="bluetooth" type="xsd:string" />
</xsd:sequence>
</xsd:restriction>
</xsd:complexContent>
</xsd:complexType>
</xsd:element>
<xsd:element name="items">
<xsd:complexType>
<xsd:complexContent>
<xsd:restriction base="xsd:anyType">
<xsd:sequence>
<xsd:element ref="t:OPTIONS" minOccurs="0"
maxOccurs="unbounded" />
<xsd:element ref="t:CONSOMMATION" minOccurs="0"
maxOccurs="unbounded" />
<xsd:element ref="t:PERSONNALISATION" minOccurs="0"
maxOccurs="unbounded" />
<xsd:element ref="t:COMMENTAIRES" minOccurs="0"
maxOccurs="unbounded" />
</xsd:sequence>
</xsd:restriction>
</xsd:complexContent>
</xsd:complexType>
</xsd:element>
</xsd:schema>

j'ai beaucoup cherché notament sur msdn2
http://msdn2.microsoft.com/fr-fr/library/system.xml.schema.xmlschema(VS.80).aspx
et pages suivantes

je suis bloqué

qui a une piste ?



Avatar
Helter Skelter
ok Paul et merci pour ton attention

je possede une base sql serv 2005 avec un table contenant un champs xml
cette table est la table des articles.
mes articles étant hétérogenes, le champs xml des caracteristiques n'est pas
figé.
je peux dedans mettre les caracteristiques d'un refrigirateur ou celles d'un
vehicule 4x4.
j'ai donc créé autant de schema que de "famille" d'article.

quand je dois lire un article, pour lire le champs caracteristique, je dois
d'abord aller chercher le schema associé a cet article.
ce schema va me servir de "masque" d'affichage pour pouvoir afficher les
bons intitulé de champs dans ma page.
Idem pour saisir un article
en fonction de sa famille et donc de son schema associé, il va me falloir
creer dynamiquement les labels et textbox pour saisir les bonnes
caracteristiques.

si je saisi un nouveau 4x4 par exemple
je vais devoir afficher sur ma page web de saisie un label "CONSOMMATION"
puis les labels "ville", "route" et "mix" associés aux textbox idoine.

ensuite et apres validation des types (champs string ou date ou entier) je
construirais mon xml.

mon probleme est que je n'arrive pas a lire mon schema xsd pour recuperer
les éléments comme je suis capable de le faire pour un document xml
classique.

plus exactement je ne recupere que les intitulés de niveau 1
<xsd:element name="COMMENTAIRES">
<xsd:element name="CONSOMMATION">
<xsd:element name="OPTIONS">
<xsd:element name="PERSONNALISATION">
<xsd:element name="items">

mais pas
<xsd:element name="ville" type="xsd:string" />
<xsd:element name="route" type="xsd:string" />
<xsd:element name="mix" type="xsd:string" />
contenus dans
<xsd:element name="CONSOMMATION">

ce sont pour moi des infos vitales pour mon back office creation
modification d'une caracteristique

ai-je été plus clair ?

dans mon premier post j'ai mis le programme dont je me sers ainsi que le
schema "test"

qui lui ne me donne que ceci comme resultat

CARACTERISTIQUES-PRINCIPALES
System.Xml.Schema.XmlSchemaElement
COMMENTAIRES
System.Xml.Schema.XmlSchemaElement
CONSOMMATION
System.Xml.Schema.XmlSchemaElement
OPTIONS
System.Xml.Schema.XmlSchemaElement
PERSONNALISATION
System.Xml.Schema.XmlSchemaElement
items
System.Xml.Schema.XmlSchemaElement


Cordialement





"Paul Bacelar" a écrit dans le message
de news: Oj$
C'est un peu trop chevelu pour moi ;-).

Peut-tu nous donner un cas plus simple.

Peut-tu nous donner le type fourni au runtime par "schemaObject.GetType".
--
Paul Bacelar
MVP VC++


"Helter Skelter" wrote in message
news:45ae2b44$0$27387$
Bonjour :)

j'ai besoin de connaitre le contenu exact d'un fichier xsd pour pouvoir
creer dynamiquement les champs me permettant de saisir un enregistrement
contenant un champs xml.
j'ai besoin de recuperer le nom des champs et leurs caracteristiques
(string/date/entier)

je sais maintenant lire le contenu d'un champs xml d'une table sql server
2005 en dissociant le nom des noeuds de leurs valeurs.

' les caracteristiques
Select Case (xmlRdr.NodeType)
Case System.Xml.XmlNodeType.DocumentType
' zone = xmlRdr.Name + " " + xmlRdr.Depth.ToString + " : "
zone = xmlRdr.Name + " : "
zone.Replace("-", " ")

Case System.Xml.XmlNodeType.Text
' bldr.Append((zone + xmlRdr.Value + "<br />"))
myAL.Add(zone + xmlRdr.Value)
End Select

cela fait exactement ce que je recherche mais...

je n'arrive pas a faire la meme chose des que j'attaque un flux(?) xsd !
précision mon schema n'est pas un fichier xsd mais un champs que je
recupere sur sql server
via cette requette

SELECT XML_SCHEMA_NAMESPACE(sch.name, xsd.name)
FROM sys.xml_schema_collections AS xsd
JOIN sys.schemas AS sch ON xsd.schema_id = sch.schema_id
WHERE xsd.name = 'SchemaXML_4x4'

je tente avec cette methode

Dim cmdSql As String
cmdSql = "SELECT XML_SCHEMA_NAMESPACE(sch.name, xsd.name) FROM
sys.xml_schema_collections AS xsd "
cmdSql = cmdSql + "JOIN sys.schemas AS sch ON xsd.schema_id =
sch.schema_id WHERE xsd.name = '"
cmdSql = cmdSql + Session("dropSelect") + "'" 'le drop select recupere
le nom du schema contenu dans sql server 2005

Dim xml As SqlXml
Dim xmlRdr As System.Xml.XmlReader

Dim conn As SqlConnection = New
SqlConnection(ConfigurationManager.ConnectionStrings("cs_vehicule").ConnectionString)
conn.Open()

Dim cmd As SqlCommand = New SqlCommand(cmdSql, conn)
Dim rdr As SqlDataReader = cmd.ExecuteReader
While rdr.Read

xml = rdr.GetSqlXml(0) ' (xx) = le numero du champs xml a traiter (dans
cette base c'est le 1er en partant de 0)

xmlRdr = xml.CreateReader
While xmlRdr.Read

Dim schema As XmlSchema

schema = XmlSchema.Read(xmlRdr, Nothing)
LblSchema.Text = schema.Id

Dim schemaObject As XmlSchemaObject
For Each schemaObject In schema.Items
If schemaObject.GetType() Is GetType(XmlSchemaElement) Then
Dim ElementType As XmlSchemaElement = CType(schemaObject,
XmlSchemaElement)
LblSchema.Text = LblSchema.Text + ElementType.Name.ToString + "<br/>"

Dim schemaSequence As XmlSchemaSequence
For Each schemaSequence In schema.Elements
Dim SequenceType As XmlSchemaSequence = CType(schemaObject,
XmlSchemaSequence)
LblSchema.Text = LblSchema.Text +
SequenceType.Items.ToString(+"<br/>")
Next


End If

'voir si ceci affiche autre chose ! non cela n'affiche rien
LblSchema.Text = LblSchema.Text + schemaObject.ToString + "<br/>"

'ceci ne fait rien du tout !
'If schemaObject.GetType() Is GetType(XmlSchemaSequence) Then
' Dim SequenceType As XmlSchemaSequence = CType(schemaObject,
XmlSchemaSequence)
' LblSchema.Text = LblSchema.Text +
SequenceType.Items.ToString(+"<br/>")
'End If

'ceci ne fait rien du tout !
'If schemaObject.GetType() Is GetType(XmlSchemaSimpleType) Then
' Dim simpleType As XmlSchemaSimpleType = CType(schemaObject,
XmlSchemaSimpleType)
' LblSchema.Text = LblSchema.Text + simpleType.Name.ToString + " " +
simpleType.Datatype.ValueType.ToString()
'End If

'ceci ne fait rien du tout !
'If schemaObject.GetType() Is GetType(XmlSchemaComplexType) Then
' Dim complexType As XmlSchemaComplexType = CType(schemaObject,
XmlSchemaComplexType)
' LblSchema.Text = LblSchema.Text + complexType.Name + " " +
complexType.Datatype.ValueType.ToString()
' LblSchema.Text = LblSchema.Text +
complexType.BaseXmlSchemaType.ToString() + "<br/>"
'End If
Next schemaObject
End While
xmlRdr.Close()

End While
rdr.Close()
conn.Close()

le programme ci dessus affiche bien un resultat mais pas le reste de mon
schema...
COMMENTAIRES
CONSOMMATION
OPTIONS
PERSONNALISATION
items

mais pas le contenu à l'interieur de ces zones



Mon xsd est peut-etre mal formé ?
voici celui des 4x4 servant à mes tests

<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns:t="http://zed.org/4x4.xsd" targetNamespace="http://zed.org/4x4.xsd"
elementFormDefault="qualified">
<xsd:element name="COMMENTAIRES">
<xsd:complexType>
<xsd:complexContent>
<xsd:restriction base="xsd:anyType">
<xsd:sequence>
<xsd:element name="Commentaire" type="xsd:string" />
</xsd:sequence>
</xsd:restriction>
</xsd:complexContent>
</xsd:complexType>
</xsd:element>
<xsd:element name="CONSOMMATION">
<xsd:complexType>
<xsd:complexContent>
<xsd:restriction base="xsd:anyType">
<xsd:sequence>
<xsd:element name="ville" type="xsd:string" />
<xsd:element name="route" type="xsd:string" />
<xsd:element name="mix" type="xsd:string" />
</xsd:sequence>
</xsd:restriction>
</xsd:complexContent>
</xsd:complexType>
</xsd:element>
<xsd:element name="OPTIONS">
<xsd:complexType>
<xsd:complexContent>
<xsd:restriction base="xsd:anyType">
<xsd:sequence>
<xsd:element name="boite-auto" type="xsd:string" />
<xsd:element name="regulateur-vitesse" type="xsd:string" />
<xsd:element name="Sièges-av-chauffants" type="xsd:string" />
</xsd:sequence>
</xsd:restriction>
</xsd:complexContent>
</xsd:complexType>
</xsd:element>
<xsd:element name="PERSONNALISATION">
<xsd:complexType>
<xsd:complexContent>
<xsd:restriction base="xsd:anyType">
<xsd:sequence>
<xsd:element name="calandre-interchangeable" type="xsd:string"
/>
<xsd:element name="bluetooth" type="xsd:string" />
</xsd:sequence>
</xsd:restriction>
</xsd:complexContent>
</xsd:complexType>
</xsd:element>
<xsd:element name="items">
<xsd:complexType>
<xsd:complexContent>
<xsd:restriction base="xsd:anyType">
<xsd:sequence>
<xsd:element ref="t:OPTIONS" minOccurs="0"
maxOccurs="unbounded" />
<xsd:element ref="t:CONSOMMATION" minOccurs="0"
maxOccurs="unbounded" />
<xsd:element ref="t:PERSONNALISATION" minOccurs="0"
maxOccurs="unbounded" />
<xsd:element ref="t:COMMENTAIRES" minOccurs="0"
maxOccurs="unbounded" />
</xsd:sequence>
</xsd:restriction>
</xsd:complexContent>
</xsd:complexType>
</xsd:element>
</xsd:schema>

j'ai beaucoup cherché notament sur msdn2
http://msdn2.microsoft.com/fr-fr/library/system.xml.schema.xmlschema(VS.80).aspx
et pages suivantes

je suis bloqué

qui a une piste ?







Avatar
Helter Skelter
toujours pas de reponses :)
je suis vraiment bloqué :(

"Helter Skelter" a écrit dans le message de news:
45ae2b44$0$27387$
Bonjour :)

j'ai besoin de connaitre le contenu exact d'un fichier xsd pour pouvoir
creer dynamiquement les champs me permettant de saisir un enregistrement
contenant un champs xml.
j'ai besoin de recuperer le nom des champs et leurs caracteristiques
(string/date/entier)

je sais maintenant lire le contenu d'un champs xml d'une table sql server
2005 en dissociant le nom des noeuds de leurs valeurs.

' les caracteristiques
Select Case (xmlRdr.NodeType)
Case System.Xml.XmlNodeType.DocumentType
' zone = xmlRdr.Name + " " + xmlRdr.Depth.ToString + " : "
zone = xmlRdr.Name + " : "
zone.Replace("-", " ")

Case System.Xml.XmlNodeType.Text
' bldr.Append((zone + xmlRdr.Value + "<br />"))
myAL.Add(zone + xmlRdr.Value)
End Select

cela fait exactement ce que je recherche mais...

je n'arrive pas a faire la meme chose des que j'attaque un flux(?) xsd !
précision mon schema n'est pas un fichier xsd mais un champs que je
recupere sur sql server
via cette requette

SELECT XML_SCHEMA_NAMESPACE(sch.name, xsd.name)
FROM sys.xml_schema_collections AS xsd
JOIN sys.schemas AS sch ON xsd.schema_id = sch.schema_id
WHERE xsd.name = 'SchemaXML_4x4'

je tente avec cette methode

Dim cmdSql As String
cmdSql = "SELECT XML_SCHEMA_NAMESPACE(sch.name, xsd.name) FROM
sys.xml_schema_collections AS xsd "
cmdSql = cmdSql + "JOIN sys.schemas AS sch ON xsd.schema_id =
sch.schema_id WHERE xsd.name = '"
cmdSql = cmdSql + Session("dropSelect") + "'" 'le drop select recupere le
nom du schema contenu dans sql server 2005

Dim xml As SqlXml
Dim xmlRdr As System.Xml.XmlReader

Dim conn As SqlConnection = New
SqlConnection(ConfigurationManager.ConnectionStrings("cs_vehicule").ConnectionString)
conn.Open()

Dim cmd As SqlCommand = New SqlCommand(cmdSql, conn)
Dim rdr As SqlDataReader = cmd.ExecuteReader
While rdr.Read

xml = rdr.GetSqlXml(0) ' (xx) = le numero du champs xml a traiter (dans
cette base c'est le 1er en partant de 0)

xmlRdr = xml.CreateReader
While xmlRdr.Read

Dim schema As XmlSchema

schema = XmlSchema.Read(xmlRdr, Nothing)
LblSchema.Text = schema.Id

Dim schemaObject As XmlSchemaObject
For Each schemaObject In schema.Items
If schemaObject.GetType() Is GetType(XmlSchemaElement) Then
Dim ElementType As XmlSchemaElement = CType(schemaObject,
XmlSchemaElement)
LblSchema.Text = LblSchema.Text + ElementType.Name.ToString + "<br/>"

Dim schemaSequence As XmlSchemaSequence
For Each schemaSequence In schema.Elements
Dim SequenceType As XmlSchemaSequence = CType(schemaObject,
XmlSchemaSequence)
LblSchema.Text = LblSchema.Text +
SequenceType.Items.ToString(+"<br/>")
Next


End If

'voir si ceci affiche autre chose ! non cela n'affiche rien
LblSchema.Text = LblSchema.Text + schemaObject.ToString + "<br/>"

'ceci ne fait rien du tout !
'If schemaObject.GetType() Is GetType(XmlSchemaSequence) Then
' Dim SequenceType As XmlSchemaSequence = CType(schemaObject,
XmlSchemaSequence)
' LblSchema.Text = LblSchema.Text +
SequenceType.Items.ToString(+"<br/>")
'End If

'ceci ne fait rien du tout !
'If schemaObject.GetType() Is GetType(XmlSchemaSimpleType) Then
' Dim simpleType As XmlSchemaSimpleType = CType(schemaObject,
XmlSchemaSimpleType)
' LblSchema.Text = LblSchema.Text + simpleType.Name.ToString + " " +
simpleType.Datatype.ValueType.ToString()
'End If

'ceci ne fait rien du tout !
'If schemaObject.GetType() Is GetType(XmlSchemaComplexType) Then
' Dim complexType As XmlSchemaComplexType = CType(schemaObject,
XmlSchemaComplexType)
' LblSchema.Text = LblSchema.Text + complexType.Name + " " +
complexType.Datatype.ValueType.ToString()
' LblSchema.Text = LblSchema.Text +
complexType.BaseXmlSchemaType.ToString() + "<br/>"
'End If
Next schemaObject
End While
xmlRdr.Close()

End While
rdr.Close()
conn.Close()

le programme ci dessus affiche bien un resultat mais pas le reste de mon
schema...
COMMENTAIRES
CONSOMMATION
OPTIONS
PERSONNALISATION
items

mais pas le contenu à l'interieur de ces zones



Mon xsd est peut-etre mal formé ?
voici celui des 4x4 servant à mes tests

<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns:t="http://zed.org/4x4.xsd" targetNamespace="http://zed.org/4x4.xsd"
elementFormDefault="qualified">
<xsd:element name="COMMENTAIRES">
<xsd:complexType>
<xsd:complexContent>
<xsd:restriction base="xsd:anyType">
<xsd:sequence>
<xsd:element name="Commentaire" type="xsd:string" />
</xsd:sequence>
</xsd:restriction>
</xsd:complexContent>
</xsd:complexType>
</xsd:element>
<xsd:element name="CONSOMMATION">
<xsd:complexType>
<xsd:complexContent>
<xsd:restriction base="xsd:anyType">
<xsd:sequence>
<xsd:element name="ville" type="xsd:string" />
<xsd:element name="route" type="xsd:string" />
<xsd:element name="mix" type="xsd:string" />
</xsd:sequence>
</xsd:restriction>
</xsd:complexContent>
</xsd:complexType>
</xsd:element>
<xsd:element name="OPTIONS">
<xsd:complexType>
<xsd:complexContent>
<xsd:restriction base="xsd:anyType">
<xsd:sequence>
<xsd:element name="boite-auto" type="xsd:string" />
<xsd:element name="regulateur-vitesse" type="xsd:string" />
<xsd:element name="Sièges-av-chauffants" type="xsd:string" />
</xsd:sequence>
</xsd:restriction>
</xsd:complexContent>
</xsd:complexType>
</xsd:element>
<xsd:element name="PERSONNALISATION">
<xsd:complexType>
<xsd:complexContent>
<xsd:restriction base="xsd:anyType">
<xsd:sequence>
<xsd:element name="calandre-interchangeable" type="xsd:string"
/>
<xsd:element name="bluetooth" type="xsd:string" />
</xsd:sequence>
</xsd:restriction>
</xsd:complexContent>
</xsd:complexType>
</xsd:element>
<xsd:element name="items">
<xsd:complexType>
<xsd:complexContent>
<xsd:restriction base="xsd:anyType">
<xsd:sequence>
<xsd:element ref="t:OPTIONS" minOccurs="0"
maxOccurs="unbounded" />
<xsd:element ref="t:CONSOMMATION" minOccurs="0"
maxOccurs="unbounded" />
<xsd:element ref="t:PERSONNALISATION" minOccurs="0"
maxOccurs="unbounded" />
<xsd:element ref="t:COMMENTAIRES" minOccurs="0"
maxOccurs="unbounded" />
</xsd:sequence>
</xsd:restriction>
</xsd:complexContent>
</xsd:complexType>
</xsd:element>
</xsd:schema>

j'ai beaucoup cherché notament sur msdn2
http://msdn2.microsoft.com/fr-fr/library/system.xml.schema.xmlschema(VS.80).aspx
et pages suivantes

je suis bloqué

qui a une piste ?