dedZep
2007-01-26 09:49:02 UTC
Personne ne sait vraiment comment recuperer
"CONSOMMATION"
"ville" , (string)
"route" ,(string)
"mix" , (string)
dans un schema contenant
<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>
C'est si facile dans un simple docuement xml !
mais pas dans un schema xsd ?
Ne me dites pas qu'un xsd est un xml comme un autre ou alors prouvez le moi
par un exemple !
moi, je n'y arrive pas meme en reprenant la routine servant a lire un champs
xml dans une base.
"CONSOMMATION"
"ville" , (string)
"route" ,(string)
"mix" , (string)
dans un schema contenant
<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>
C'est si facile dans un simple docuement xml !
mais pas dans un schema xsd ?
Ne me dites pas qu'un xsd est un xml comme un autre ou alors prouvez le moi
par un exemple !
moi, je n'y arrive pas meme en reprenant la routine servant a lire un champs
xml dans une base.
bonjour a toutes & tous :)
je possede une base sql serv 2005 avec une 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 donc mettre ldedans es caracteristiques d'un refrigirateur ou
celles d'un vehicule 4x4.
j'ai donc créé autant de schema que de "famille" d'article.
quand j'affiche un article, et que je veux lire le champs caracteristique,
je dois
1) 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 !)
2) 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 le contenu de 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 les...
<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é clair ?
----------------------------en savoir un peu plus sur mon travail !
--------------------
Comment j'accède à mon schema ? comme ceci !
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'
comment j'essaie de lire ce schema actuellement ?
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/>"
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
----------------------------en savoir un peu plus sur mon travail !
--------------------
que contient mon schema et, est-il bien formé ?
<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>
voila c'est long mais vous savez tout !
Cordialement
je possede une base sql serv 2005 avec une 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 donc mettre ldedans es caracteristiques d'un refrigirateur ou
celles d'un vehicule 4x4.
j'ai donc créé autant de schema que de "famille" d'article.
quand j'affiche un article, et que je veux lire le champs caracteristique,
je dois
1) 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 !)
2) 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 le contenu de 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 les...
<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é clair ?
----------------------------en savoir un peu plus sur mon travail !
--------------------
Comment j'accède à mon schema ? comme ceci !
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'
comment j'essaie de lire ce schema actuellement ?
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/>"
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
----------------------------en savoir un peu plus sur mon travail !
--------------------
que contient mon schema et, est-il bien formé ?
<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>
voila c'est long mais vous savez tout !
Cordialement