2010-06-16 77 views
1

我得到XML輸入,看起來像這樣讀取XML中的XML字符串作爲Flex中/ AS3

<?xml version="1.0" encoding="utf-8"?> 
<data1>this is data 1</data1> 
<data2>this is data 2</data2> 
<data3> 
     <3a>this is data 3a</3a> 
     <3b>this is data 3b</3b> 
     <3c> 
      <TextFlow xmlns="http://ns.adobe.com/textLayout/2008"> 
        <p direction="ltr" > 
          <span>some text</span> 
          <span>some additional text</span> 
        </p> 
        <p direction="ltr"> 
          <span>some text</span> 
          <span>some additional text</span> 
        </p> 
      </TextFlow> 
     </3c> 
</data3> 

我可以event.result.data1,其輸出字符串this is data1

閱讀<data1>但是,當我做同樣的事情event.result.data3.3c,它打印object [object]所以我想它試圖深入挖掘樹。但是我需要從包括<TextFlow></TextFlow>開始的實際字符串文本(不是xml樹)存儲和打印爲字符串。任何想法這是什麼語法?

我要找的應該是這樣的字符串:

 <TextFlow xmlns="http://ns.adobe.com/textLayout/2008"> 
       <p direction="ltr" > 
         <span>some text</span> 
         <span>some additional text</span> 
       </p> 
       <p direction="ltr"> 
         <span>some text</span> 
         <span>some additional text</span> 
       </p> 
     </TextFlow> 

回答

3

首先,我看到一對夫婦的問題,你的XML。這是無效的,你不會有錯誤是令人驚訝的。

1)沒有根節點。一個簡單的修復就是將你已經擁有的東西放在標籤中或者更有意義的東西上。但是你需要有一個根節點。

2)以數字開頭的節點名稱是一個壞主意。根據XML規範不確定它是否有效,但即使它是,它也不會是有效的動作。在這種情況下,你必須避免使用點(而不是data1.3c,像data1["3c"]。作爲一般規則,命名您的節點,就像你的名字你的變量,你會被罰款。

如果<TextFlow>內的數據意味着是一個字符串,你不感興趣的解析它,也許是一個更好的主意是它包裹在CDATA節:否則

<c3><![CDATA[<TextFlow xmlns="http://ns.adobe.com/textLayout/2008"> 
    <p direction="ltr" > 
      <span>some text</span> 
      <span>some additional text</span> 
    </p> 
    <p direction="ltr"> 
      <span>some text</span> 
      <span>some additional text</span> 
    </p> 
</TextFlow>]]></c3> 

,你應該使用XML命名空間與它的工作(注意<TextFlow>節點具有xmlns聲明; xmlns代表XML名稱空間。

你可以嘗試這樣的事情抓住它:

var layout_ns:Namespace = new Namespace("http://ns.adobe.com/textLayout/2008"); 
trace(your_xml.data3.c3.layout_ns::TextFlow); 

通知TextFlow是正確的命名空間前綴。

上述代碼的替代被設置默認名稱空間:

var layout_ns:Namespace = new Namespace("http://ns.adobe.com/textLayout/2008"); 
default xml namespace = layout_ns; 
trace(your_xml.data3.c3.TextFlow); 

這種失敗的具有在第一位置的命名空間的目的,雖然。

PS

如果使用第二個選項(即無CDATA)去,一旦你得到你想要的節點,您可以使用toXMLString方法來獲取節點作爲字符串的內容。

+0

胡安,非常感謝。最好的答案。 – duder 2010-06-16 03:55:04