2012-08-02 55 views
0

類型屬性我有XML的一點點,看起來像這樣: 獲取一個XSI的價值:在ActionScript 3

<LayerDefinition xsi:type ="GridLayerDefinition"> 
    <Name>Solids</Name> 
    <Grid> 
    <Width>48</Width> 
    <Height>48</Height> 
    </Grid> 
    <ScrollFactor> 
    <X>1</X> 
    <Y>1</Y> 
    </ScrollFactor> 
    <Color A="255" R="0" G="0" B="0" /> 
    <ExportMode>Rectangles</ExportMode> 
</LayerDefinition> 

我想是XSI的值:type屬性。由於冒號,我不能簡單地使用。@無論如何。它不會編譯。我被建議嘗試使用.attribute(「xsi:type」),但是不會返回任何結果。以下是我的代碼:

private function loadProject():void 
    { 
     var curProject:XML = FP.getXML(TESTPROJECT); 
     var entry:XML; 
     var counter:uint = 0; 
     trace("Loading project"); 
    // trace(curProject.*); 
     trace (curProject.LayerDefinitions.LayerDefinition.attribute("xsi:type")); 
     for each (entry in curProject.LayerDefinitions.LayerDefinition) 
     { 
      //trace("Grid type is: " + entry.attribute("xsi:type")); 
      // trace("Grid type is: " + entry.attribute('xsi:type')); 
      // trace ("Grid is: " + entry.Name); 
     } 
    } 

有什麼建議嗎?我覺得我已經嘗試了一切在這一點

+0

您發佈的示例xml不是標準的e4x格式。正因爲如此,你無法解析它。 ROOT節點不可訪問。 – 2012-08-02 02:54:51

回答

1

你沒有回覆我對你的其他帖子的評論,爲什麼不呢? xsi在哪裏定義?在你的代碼中使用這個XML的地方應該有一個xmlns:xsi =「someuri」。我已經遇到類似的問題,使用XML中具有xml名稱空間的屬性,AS3中的E4X可以抽取這些必須在AS3中創建名稱空間的合格屬性或節點。

閱讀文檔中的部分稱爲XML命名空間下面

http://www.senocular.com/flash/tutorials/as3withflashcs3/?page=4

基本上你需要做類似的信息(以下從鏈接採取以上):

// XML with xpl namespace 
var xml:XML = 
    <xml xmlns:xpl="http://www.example.com/uri/"> 
     <xpl:text value="Hello World" xpl:value="Hello Namespace" /> 
    </xml>; 

// Define namespace with xpl URI 
var xplNs:Namespace = new Namespace("http://www.example.com/uri/"); 

// Get value of text attribute 
// with and without namespace 
trace(xml.xplNs::[email protected]); // traces Hello World 
trace(xml.xplNs::[email protected]::value); // traces Hello Namespace 

另一種選擇是:

var xplNs:Namespace = new Namespace("http://www.example.com/uri/"); 
use namespace xmplNs; 

在你的情況下,參數f或者新的Namespace調用應該是xmlns:xsi =設置的任何值。然後,使用xplNs ::或任何您命名的命名空間實例,使用該名稱空間爲要獲取的屬性或節點添加前綴。

另外,如果你沒有問題,那麼你可以遵循本網站的建議以及刪除命名空間(不可否認,我之前自己做過這件事,但總覺得這是一個骯髒的解決方法,做正確的)http://brianmriley.wordpress.com/2008/03/14/remove-xml-namespaces-in-flex-or-as3/

如果沒有在代碼中的地方有一個xmlns:xsi我不知道發生了什麼。

+0

明白了:trace(curProject.LayerDefinitions.LayerDefinition。@ nSpace :: type); 謝謝! – GilloD 2012-08-03 02:59:20