OVH Cloud OVH Cloud

fichier xsd

5 réponses
Avatar
Helter Skelter
Bonjour.
Apparement, personne (meme chez Microsoft ?) ne sait comment lire le contenu
d'un fichier xsd pour recuperer le nom des noeuds ainsi que leurs enfants
???

5 réponses

Avatar
Sébastien FERRAND [MVP C#]
Helter Skelter avait énoncé :
Bonjour.
Apparement, personne (meme chez Microsoft ?) ne sait comment lire le contenu
d'un fichier xsd pour recuperer le nom des noeuds ainsi que leurs enfants ???



Un fichier XSD est fichier XML, donc avec XmlDocument !

Sébastien

--
Sébastien FERRAND
Microsoft Visual C# MVP
blog : http://blogs.developpeur.org/sebmafate
Avatar
Helter Skelter
merci pour votre intervention

helas votre explication ne me donne aucune possibilité de comprendre

dans mon post du 17/01 je donne l'etendu de mon probleme
soit ma question est mal posée
soit mon idée est erronée et n'apportera pas de solution

1) je lis un schema xsd dans un champs suite a une requette sql
2) cela marche mais que pour un seul niveau !

est-ce que ma methode de lecture n'est pas la bonne ?

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") + "'"

Dim xml As SqlXml

Dim xmlRdr As System.Xml.XmlReader

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

conn.Open()

Dim cmd As SqlCommand = New SqlCommand(cmdSql, conn)

Dim rdr As SqlDataReader = cmd.ExecuteReader

precedent_0 = "" 'permet d'afficher le noeud entrant (<ECRAN>)

precedent_1 = "" 'permet d'enlever le noeud fermant (</ECRAN>)

'Dim schema As XmlSchema = XmlSchema.Read(XmlReader.Create(document),
Nothing)

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)

Dim schemaObject As XmlSchemaObject

Dim ElementType As XmlSchemaElement

For Each schemaObject In schema.Items

If schemaObject.GetType() Is GetType(XmlSchemaElement) Then

ElementType = CType(schemaObject, XmlSchemaElement)

LblSchema.Text = LblSchema.Text + ElementType.Name.ToString + "<br/>"

End If

Next schemaObject

LblSchema.Text = LblSchema.Text + "<br/>" + "* - * - * - *" + "<br/>"



End While

xmlRdr.Close()

End While

rdr.Close()

conn.Close()


"Sébastien FERRAND [MVP C#]" <listes_seb[@]vbmaf.net> a écrit dans le
message de news:
Helter Skelter avait énoncé :
Bonjour.
Apparement, personne (meme chez Microsoft ?) ne sait comment lire le
contenu d'un fichier xsd pour recuperer le nom des noeuds ainsi que leurs
enfants ???



Un fichier XSD est fichier XML, donc avec XmlDocument !

Sébastien

--
Sébastien FERRAND
Microsoft Visual C# MVP
blog : http://blogs.developpeur.org/sebmafate




Avatar
Sébastien FERRAND [MVP C#]
Ce que je voulais dire :

Un fichier XSD est un fichier XML... donc comme tout XML, il est
possible de le lire avec les classes dédiées du framework. En
l'occurence, il existe la classe XmlDocument qui permet de parcours
noeud par noeud une arborescence XML.

XmlDocument xmlDoc = new XmlDocument();
xmlDoc.LoadXml( taStringXML );

Sébastien

Helter Skelter a formulé la demande :
merci pour votre intervention

helas votre explication ne me donne aucune possibilité de comprendre

dans mon post du 17/01 je donne l'etendu de mon probleme
soit ma question est mal posée
soit mon idée est erronée et n'apportera pas de solution

1) je lis un schema xsd dans un champs suite a une requette sql
2) cela marche mais que pour un seul niveau !

est-ce que ma methode de lecture n'est pas la bonne ?

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") + "'"

Dim xml As SqlXml

Dim xmlRdr As System.Xml.XmlReader

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

conn.Open()

Dim cmd As SqlCommand = New SqlCommand(cmdSql, conn)

Dim rdr As SqlDataReader = cmd.ExecuteReader

precedent_0 = "" 'permet d'afficher le noeud entrant (<ECRAN>)

precedent_1 = "" 'permet d'enlever le noeud fermant (</ECRAN>)

'Dim schema As XmlSchema = XmlSchema.Read(XmlReader.Create(document),
Nothing)

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)

Dim schemaObject As XmlSchemaObject

Dim ElementType As XmlSchemaElement

For Each schemaObject In schema.Items

If schemaObject.GetType() Is GetType(XmlSchemaElement) Then

ElementType = CType(schemaObject, XmlSchemaElement)

LblSchema.Text = LblSchema.Text + ElementType.Name.ToString + "<br/>"

End If

Next schemaObject

LblSchema.Text = LblSchema.Text + "<br/>" + "* - * - * - *" + "<br/>"



End While

xmlRdr.Close()

End While

rdr.Close()

conn.Close()


"Sébastien FERRAND [MVP C#]" <listes_seb[@]vbmaf.net> a écrit dans le message
de news:
Helter Skelter avait énoncé :
Bonjour.
Apparement, personne (meme chez Microsoft ?) ne sait comment lire le
contenu d'un fichier xsd pour recuperer le nom des noeuds ainsi que leurs
enfants ???



Un fichier XSD est fichier XML, donc avec XmlDocument !

Sébastien

-- Sébastien FERRAND
Microsoft Visual C# MVP
blog : http://blogs.developpeur.org/sebmafate







--
Sébastien FERRAND
Microsoft Visual C# MVP
blog : http://blogs.developpeur.org/sebmafate
Avatar
Helter Skelter
merci pour votre rapidité
je n'ai pas de string xml mais un xml = rdr.GetSqlXml(0) (venant de Dim rdr
As SqlDataReader = cmd.ExecuteReader)

j'ai reussi par ceci


Dim rdr As SqlDataReader = cmd.ExecuteReader

While rdr.Read

Dim doc As XmlDocument = New XmlDocument

xml = rdr.GetSqlXml(0)

xmlRdr = xml.CreateReader

Response.Write(xml)

While xmlRdr.Read

Dim schema As XmlSchema

schema = XmlSchema.Read(xmlRdr, Nothing)

doc.LoadXml(xml.Value) --------------------j'ai essayé avec schema cela ne
marche pas mais avec xml.value oui



Dim reader As XmlNodeReader = New XmlNodeReader(doc)

'Parse the file and display each of the nodes.

While reader.Read()

Select Case reader.NodeType

Case XmlNodeType.Element

Response.Write(reader.Name & "--" & reader.Value & "<br/>")

'Console.Write("<{0}>", reader.Name)

Case XmlNodeType.Text

Response.Write(reader.Name & "//" & reader.Value & "<br/>")

'Console.Write(reader.Value)

Case XmlNodeType.CDATA

Response.Write(reader.Value & "<br/>")

'Console.Write(reader.Value)

Case XmlNodeType.ProcessingInstruction

Response.Write(reader.Name & " - " & reader.Value & "<br/>")

'Console.Write("<?{0} {1}?>", reader.Name, reader.Value)

Case XmlNodeType.Comment

Response.Write("<!--" & reader.Value & "-->" & "<br/>")

'Console.Write("<!--{0}-->", reader.Value)

Case XmlNodeType.XmlDeclaration

Response.Write("<?xml version='1.0'?>" & "<br/>")

'Console.Write("<?xml version='1.0'?>")

Case XmlNodeType.Document

'Response.Write(reader.Name & "--" & reader.Value & "<br/>")

Case XmlNodeType.EndElement

Response.Write("</" & reader.Name & ">" & "<br/>")

'Console.Write("</{0}>", reader.Name)

End Select

End While

End While


par contre je n'obtiens que ceci comme resultat
System.Data.SqlTypes.SqlXmlxsd:schema--
xsd:element--
xsd:complexType--
xsd:complexContent--
xsd:restriction--
xsd:sequence--
xsd:element--
xsd:complexType--
xsd:complexContent--
xsd:restriction--
xsd:sequence--
xsd:element--
xsd:element--
xsd:element--
xsd:element--
xsd:element--

pour un schema contenant
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema" .....
<xsd:element name="slides">
<xsd:complexType>
<xsd:complexContent>
<xsd:restriction base="xsd:anyType">
<xsd:sequence>
<xsd:element name="slide" maxOccurs="unbounded">
<xsd:complexType>
<xsd:complexContent>
<xsd:restriction base="xsd:anyType">
<xsd:sequence>
<xsd:element name="title" type="xsd:string" />
<xsd:element name="review-year" ...
<xsd:element name="review-month" ...
<xsd:element name="review-day" ...
<xsd:element name="usage-cost" ...

moi ce que je veux obtenir c'est
slide
puis title
puis review-year
Avatar
Helter Skelter
Bonjour

en suivant (et, pour cause,) en adaptant votre idée je n'obtiens que ceci
comme resultat
System.Data.SqlTypes.SqlXmlxsd:schema--
xsd:element--
xsd:complexType--
xsd:complexContent--
xsd:restriction--
xsd:sequence--
xsd:element--
xsd:complexType--
xsd:complexContent--
xsd:restriction--
xsd:sequence--
xsd:element--
xsd:element--
xsd:element--
xsd:element--
xsd:element--

pour un schema contenant
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema" .....
<xsd:element name="slides">
<xsd:complexType>
<xsd:complexContent>
<xsd:restriction base="xsd:anyType">
<xsd:sequence>
<xsd:element name="slide" maxOccurs="unbounded">
<xsd:complexType>
<xsd:complexContent>
<xsd:restriction base="xsd:anyType">
<xsd:sequence>
<xsd:element name="title" type="xsd:string" />
<xsd:element name="review-year" ...
<xsd:element name="review-month" ...
<xsd:element name="review-day" ...
<xsd:element name="usage-cost" ...

moi ce que je veux obtenir c'est
slide
puis title -- type="string"
puis review-year -- type="string"
puis review-month -- type="string"
etc....

je desespere un peu la... :)

"Sébastien FERRAND [MVP C#]" <listes_seb[@]vbmaf.net> a écrit dans le
message de news:
Ce que je voulais dire :

Un fichier XSD est un fichier XML... donc comme tout XML, il est possible
de le lire avec les classes dédiées du framework. En l'occurence, il
existe la classe XmlDocument qui permet de parcours noeud par noeud une
arborescence XML.

XmlDocument xmlDoc = new XmlDocument();
xmlDoc.LoadXml( taStringXML );

Sébastien

Helter Skelter a formulé la demande :
merci pour votre intervention

helas votre explication ne me donne aucune possibilité de comprendre

dans mon post du 17/01 je donne l'etendu de mon probleme
soit ma question est mal posée
soit mon idée est erronée et n'apportera pas de solution

1) je lis un schema xsd dans un champs suite a une requette sql
2) cela marche mais que pour un seul niveau !

est-ce que ma methode de lecture n'est pas la bonne ?

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") + "'"

Dim xml As SqlXml

Dim xmlRdr As System.Xml.XmlReader

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

conn.Open()

Dim cmd As SqlCommand = New SqlCommand(cmdSql, conn)

Dim rdr As SqlDataReader = cmd.ExecuteReader

precedent_0 = "" 'permet d'afficher le noeud entrant (<ECRAN>)

precedent_1 = "" 'permet d'enlever le noeud fermant (</ECRAN>)

'Dim schema As XmlSchema = XmlSchema.Read(XmlReader.Create(document),
Nothing)

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)

Dim schemaObject As XmlSchemaObject

Dim ElementType As XmlSchemaElement

For Each schemaObject In schema.Items

If schemaObject.GetType() Is GetType(XmlSchemaElement) Then

ElementType = CType(schemaObject, XmlSchemaElement)

LblSchema.Text = LblSchema.Text + ElementType.Name.ToString + "<br/>"

End If

Next schemaObject

LblSchema.Text = LblSchema.Text + "<br/>" + "* - * - * - *" + "<br/>"



End While

xmlRdr.Close()

End While

rdr.Close()

conn.Close()


"Sébastien FERRAND [MVP C#]" <listes_seb[@]vbmaf.net> a écrit dans le
message de news:
Helter Skelter avait énoncé :
Bonjour.
Apparement, personne (meme chez Microsoft ?) ne sait comment lire le
contenu d'un fichier xsd pour recuperer le nom des noeuds ainsi que
leurs enfants ???



Un fichier XSD est fichier XML, donc avec XmlDocument !

Sébastien

-- Sébastien FERRAND
Microsoft Visual C# MVP
blog : http://blogs.developpeur.org/sebmafate







--
Sébastien FERRAND
Microsoft Visual C# MVP
blog : http://blogs.developpeur.org/sebmafate