2009-06-16 4 views
1

J'ai un fichier XML avec un schéma xml. Le schéma xml définit un type complexe abstrait avec 2 attributs facultatifs ayant des valeurs par défaut. Ensuite, j'ai plusieurs types complexes qui étendent la base. Et enfin les nœuds des types définis. Donc, je charge le xml et quand j'analyse chaque nœud, les attributs optionnels ne sont pas présents du tout. J'ai essayé de faire l'imbécile avec les espaces de noms, même:Toute méthode permettant de créer des valeurs d'attributs par défaut en XML est analysée dans Flex basé sur le schéma XSD?

XML.ignoreProcessingInstructions = false; 

Pas de chance. Quelque chose de similaire était vécu par ce type sur codingforums, mais c'était comme il y a 5 ans. La même chose m'arrive avec firefox 3.0.11 - le xml est montré sans les attributs par défaut. Pour l'instant, je définis les valeurs par défaut dans le code, mais n'y a-t-il pas un moyen de les rendre disponibles à partir du schéma xml?

Exemple d'un schéma XML:

<schema xmlns="http://www.w3.org/2001/XMLSchema" targetNamespace="http://www.myorg.org" xmlns:tns="http://www.myorg.org" elementFormDefault="qualified"> 
<element name="config" type="tns:FieldsNode"></element> 

<complexType name="FieldsNode"> 
    <choice minOccurs="0" maxOccurs="unbounded"> 
     <element name="ImagePicker" type="tns:ImagePickerNode" 
      maxOccurs="unbounded" minOccurs="0"> 
     </element> 
    </choice> 
</complexType> 

<complexType name="FieldBase"> 
    <attribute use="required" name="id" type="string"></attribute> 
    <attribute use="optional" default="true" name="mandatory" 
     type="boolean"> 
    </attribute> 
    <attribute default="3" name="colspan" type="int" use="optional"></attribute> 
</complexType> 

<complexType name="ImagePickerNode"> 
    <complexContent> 
     <extension base="tns:FieldBase"> 
      <attribute name="maxWidth" type="int" use="required"></attribute> 
      <attribute name="maxHeight" type="int" use="required"></attribute> 
     </extension> 
    </complexContent> 
</complexType> 

XML Exemple:

<config xmlns="http://www.myorg.org" 
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
xsi:schemaLocation="http://www.myorg.org test.xsd"> 
    <ImagePicker id="somePicker" maxHeight="10" maxWidth="12"/> 
    <ImagePicker id="someOtherPicker" maxHeight="100" maxWidth="212" colspan="1" mandatory="false"/> 
</config> 

Edit: échantillon ajouté xml et schéma.

+0

Un échantillon du XML pourrait aider – Stiggler

Répondre

1

En fait, il est possible, ce gars-là rédigea comment utiliser les classes XMLDecoder et XMLEncoder dans le cadre flexible pour analyser/écriture xml basé sur un schéma:

http://blog.misprintt.net/?p=181

http://blog.misprintt.net/?p=192

Exemple d'application présentant à la fois l'analyse et l'écriture: http://misprintt.net/examples/xmlSchema/

Cependant, il convient de noter qu'il ya plusieurs bugs dans ces classes qui peuvent ou peuvent ne pas causer des problèmes pour votre application. L'un d'entre eux, si je me souviens bien, est directement lié à des paramètres optionnels avec des valeurs par défaut dans le schéma. Dans certaines instances (ou peut-être toutes), la valeur par défaut n'a jamais été définie. Cependant, ces bogues sont généralement très faciles à corriger une fois que vous avez trouvé où se trouvent les problèmes dans les classes Encoder/Decoder (parce que c'est presque toujours ces deux classes). Il peut être difficile de repérer l'erreur due à ces classes de nature hautement récursive, mais pour les schémas plus petits (et par la suite les fichiers xml) ce n'est pas vraiment difficile.

Cependant, vous devez toujours créer les types ActionScript pour le type de schéma correspondant.Cela pourrait se faire automatiquement un peu en ayant la XMLDecoder recracher que le résultat se dans un objet anonyme et sérialisation alors cet objet dans un format JSON ou AS format classe directement. Cependant, à moins que tous les attributs et éléments existent dans votre fichier XML, vous allez manquer certaines propriétés. Il ya aussi ce projet, que je dois encore évaluer: http://www.graniteds.org/confluence/display/DOC/2.+Gas3+Code+Generator

Il est censé convertir les beans Java en AS3, et le schéma pour les convertisseurs Java beans sont une douzaine de ces jours.

J'espère que ça aide!

+0

Je commence à me demander s'il y a quelque chose dans le cadre Flex qui fonctionne parfaitement ... Merci pour la réponse. –

+0

Pas de problème. Le cadre Flex est très rapide dans beaucoup de domaines, vous pouvez le dire. Heureusement, il est très facile de rouler votre propre cadre assez rapidement et Flex peut vraiment être très inspirant. Si rien d'autre que comment ne pas le faire. Pour être juste, Flex a beaucoup de belles choses à, comme MXML qui est d'or pour l'injection de dépendance. Je souhaite seulement que le langage évolue avec une meilleure prise en charge du compilateur pour les métadonnées et la génération de code personnalisé. Quoi qu'il en soit, une autre histoire pour une autre fois. –

0

Je ne connais aucune bibliothèque XML qui insère des attributs par défaut basés sur un schéma dans le DOM pour un fichier XML. Certes, Flex ne le fait pas. Je crois que les valeurs par défaut spécifiées dans un schéma sont en réalité plus de la documentation pour les outils, tels que ceux qui génèrent des classes XML sérialisables.

1

récemment trébuché sur le sujet suivant: Validate Xml in Flex3 Air

La réponse là par Gregor Kiddie pourrait également répondre à ma question. En gros deux liens à noter que par dit réponse:

XML & XSD 1

XML & XSD 2

+0

tirer Oh, désolé d'avoir répondu à peu près la même réponse! (Quoique beaucoup plus) –

+0

Pas de problème, il a probablement fallu beaucoup de temps pour écrire ... –

Questions connexes