2009-02-24 5 views
12

मैं निम्नलिखित XMLList को लूप का उपयोग किए बिना स्ट्रिंग्स के ऐरे में कैसे परिवर्तित कर सकता हूं?मैं लूप के बिना स्ट्रिंग्स के एक ऐरे में एक साधारण XMLList को कैसे परिवर्तित कर सकता हूं?

<labels> 
    <label>All</label> 
    <label>your</label> 
    <label>base</label> 
    <label>are</label> 
    <label>belong</label> 
    <label>to</label> 
    <label>us.</label> 
</labels> 

मैं इस परिणाम हैं:

["All","your","base","are","belong","to","us."] 

अभी, मैं निम्नलिखित कर रहा हूँ:

var labelsArray:Array /* of String */ = []; 

for each (var labelText:String in labels.label) 
{ 
    labelsArray.push(labelText); 
} 

अगर वहाँ ActionScript 3.0 में यह करने के लिए एक सरल तरीका है मैं सोच रहा था

+0

आपका 'परिणाम' का तात्पर्य है कि आप एक स्ट्रिंग चाहते हैं, क्या आपका मतलब है ["सभी", "आपका", "आधार", "हैं", "संबंधित", "से", "हम"।]? –

+0

मेमे चुपके जीत। बस केह रहा हू। (और एक उपयोगी सवाल।) – CodeMouse92

उत्तर

1

for लूप एएस में बेहद तेज़ हैं। आपको इसकी आवश्यकता क्यों थी? लेकिन आप इसे आज़मा सकते हैं:

private function toArray():void { 
    var xml:XML = <labels> 
       <label>all</label> 
       <label>your</label> 
       </labels>; 

    var array:* = xml.label.text().toXMLString().split("\n") ; 
    trace(array as Array); 
} 
+0

इसे "जरूरत" नहीं है, प्रति से। मैं बस सोच रहा था कि ऐसा करने के लिए एक और अधिक सुरुचिपूर्ण/सरल तरीका था - यानी एक लाइन कमांड। –

+0

शायद आप इस फ़ंक्शन को आजमा सकते हैं :) – dirkgently

+2

एक नई लाइन पर विभाजन? मुझे एक बुरा विचार लगता है। यदि लेबल में कोई नई लाइन है तो क्या होगा? –

2

आपका वर्तमान कार्यान्वयन पर्याप्त से अधिक है। (। हालांकि मैं जब तक आप वेक्टर उपयोग कर रहे हैं परेशान नहीं हैं <>): वहाँ की तरह के लिए एक एक लाइनर

var xmlLabels : XMLList = labels.label; 
var labelsArray:Array /* of String */ = new Array(xmlLabels.length); 

var index : int = 0; 

for each (var labelText:String in xmlLabels) 
{ 
    labelsArray[index++] = labelText; 
} 
0

मुझे लगता है केवल अनुकूलन आप कर सकते हैं सरणी निर्माता में आरंभिक क्षमता में पारित करने के लिए है यह कहीं कहीं ... ओह ठीक है।

प्रश्न: क्यों। लम्बाई यहां विफल रहता है? (हमेशा 0)

public static function xmlListToArray($x:XMLList):Array { 
     var t:int = $x.length; 
     var a:Array=new Array(t), i:int; 
     for (i = 0; i < t; ++i) a[i] = $x[i]; 
     return a; 
    } 
+0

एक विधि है, न कि संपत्ति। यह var टी होना चाहिए: int = $ x.length()। निश्चित नहीं है, लेकिन मुझे लगता है कि आपको 0 मिलते हैं क्योंकि यह एक लम्बा नोड खोजने की कोशिश कर रहा है, इसलिए ऐसा कुछ भी नहीं लौटा सकता है, जब int के साथ कास्ट किया जाता है 0. – invertedSpear

4

यह एक बहुत अच्छी तरह से काम करता है:

public static function xmlListToArray($x:XMLList):Array {   
    var a:Array=[], i:String; 
    for (i in $x) a[i] = $x[i]; 
    return a; 
} 
2

for छोरों की बयाना का उपयोग करता है और तार्किक XML वस्तु के रूप में दिया पर काम के बावजूद, इस XMLList के लिए एक काम है।
यह सबसे अच्छा कुछ इस तरह दिखेगा:

var xml:XML = 
<labels> 
    <label>All</label> 
    <label>your</label> 
    <label>base</label> 
    <label>are</label> 
    <label>belong</label> 
    <label>to</label> 
    <label>us.</label> 
</labels> 
; 
var list:XMLList = xml.label; 
var labels:XMLList = list.text(); //Optional 
trace(list[0]); 
trace(list[3]); 
trace(list[6]); 

यह होगा उत्पादन:

All 
are 
us. 

मैं अपने आप को फ्लैश में इस की पुष्टि की है। व्यक्तिगत रूप से यह वैकल्पिक लाइन का उपयोग करने के लिए मुझे समझ में आता है, और labels[0] संदर्भ संदर्भित करता है लेकिन इसकी आवश्यकता नहीं है।

मुझे पता है कि आप आउटपुट के रूप में तारों की एक सरणी मांग रहे हैं, लेकिन मूल रूप से मैं आपसे पूछ रहा हूं कि आप केवल XMLList ऑब्जेक्ट के सरणी एक्सेसर्स का उपयोग क्यों नहीं कर सकते हैं।

यहां पर एक बढ़िया चलना है: Senocular on E4X

+0

मुझे इसे आजमाएं ... –

+0

@Eric बेलेयर यदि आपने इसे आजमाया था, तो शायद आपको 'x'' के साथ पहले से ही 'मूवीक्लिप्स' में परिभाषित किए गए मुद्दों के साथ समस्याएं मिलीं और 'एक्सएमएल लिस्ट' की अपेक्षा की गई 'एरेज़' पर कॉरर्सिंग टाइप न करें। मैंने इसे ठीक कर दिया है, और जोर देना जारी रखता हूं कि 'एक्सएमएल लिस्ट' तरीका 'लूप' और स्ट्रिंग 'स्प्लिट' पर बेहतर तरीका है। – dlamblin

14

यह अच्छा काम करता है लेकिन XMLList के कुछ अजीब वाक्यविन्यास का उपयोग करता है। वांछित अगर अंतिम कथन एक पंक्ति पर रखा जा सकता है।

var labels:XML = <labels> 
        <label>All</label> 
        <label>your</label> 
        <label>base</label> 
        <label>are</label> 
        <label>belong</label> 
        <label>to</label> 
        <label>us.</label> 
       </labels>; 

var labelsArray:Array /* of String */ = []; 

labels.label. 
(
       labelsArray.push(toString()) 
); 

ToString() कॉल को विशेषताएँ खींचने के लिए एक विशेषता() कॉल के साथ प्रतिस्थापित किया जा सकता है।

+0

पुराना? तो बेहतर है 'के लिए'! – Nevena

+0

यह वास्तव में चालाक है। – CodeMouse92

+0

मुझे यह पसंद है, साथ ही यह पसंद नहीं है। : < :> – Jono

संबंधित मुद्दे

 संबंधित मुद्दे