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 ?
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 ?
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 ?
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 ?
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" <nowhere-man@apple.uk> wrote in message
news:45ae2b44$0$27387$ba4acef3@news.orange.fr...
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 ?
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 ?
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 ?
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 ?
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 ?