2009-06-16 36 views
1

我有一個xml與XML模式。 xml架構定義了一個具有2個可選屬性的抽象複合類型,這些屬性具有默認值。然後我有幾個複雜的類型擴展了基礎類型。最後定義類型的節點。 所以我加載XML,當我解析每個節點時,可選屬性根本不存在。 我試着與命名空間打打鬧鬧,甚至:任何使XML中的默認屬性值在Flex中基於XSD架構解析的方法?

XML.ignoreProcessingInstructions = false; 

沒有運氣。這個人在codingforums上遇到過類似的事情,但那與5年前相似。使用firefox 3.0.11時,發生了同樣的情況 - xml顯示爲沒有默認屬性。 現在我在代碼中設置默認值,但沒有辦法使它們可以從xml架構中獲得?

示例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:

<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> 

編輯:增加了樣本XML和模式。

+0

XML的示例可能有所幫助 – Stiggler 2009-06-17 03:11:43

回答

1

其實,這是可能的,這傢伙寫了如何使用的XMLDecoder和XMLEncoder類的Flex框架解析/寫XML基礎架構:

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

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

示例應用程序,展示既分析和編寫: http://misprintt.net/examples/xmlSchema/

然而,應該注意到,在這些類可能會或可能不會引起你的具體應用問題的幾個錯誤。其中一個,如果我正確記得,它與架構中默認值的可選參數直接相關。在一些(或者全部)實例中,默認值從未設置。但是,一旦你找出了編碼器/解碼器類中問題所在的地方(因爲它幾乎總是那兩個類),這些錯誤通常很容易修復。發現由於這些類具有高度遞歸性而導致的錯誤可能非常棘手,但對於較小的模式(以及隨後的xml文件),這並不是很困難。

儘管您仍然需要爲相應的模式類型創建ActionScript類型。這可以通過讓XMLDecoder將其導出爲匿名對象,然後將該對象直接序列化爲JSON格式或AS類格式來自動完成。但是,除非xml中存在所有屬性和元素,否則將錯過某些屬性。還有這個項目,我還沒有評估: http://www.graniteds.org/confluence/display/DOC/2.+Gas3+Code+Generator

它應該將Java bean轉換爲AS3,並且架構轉換爲Java bean轉換器最近還有一毛錢。

希望它有幫助!

0

我不知道任何XML庫將基於模式的默認屬性插入到XML文件的DOM中。當然,Flex不會。我相信模式中指定的默認值更像是工具的文檔,比如生成XML可序列化類的文檔。

1

近日偶然發現了以下主題:Validate Xml in Flex3 Air

答案有通過Gregor Kiddie也可能會回答我的問題。基本上兩個環節要注意按上述應答:

XML & XSD 1

XML & XSD 2

+0

哦拍攝,抱歉回答的答案几乎相同! (儘管更長) – 2009-10-29 11:14:48

+0

沒問題,它可能需要很長時間才能寫出來...... – 2009-10-29 11:42:01