как я могу получить доступ к дочерним узлам по атрибутам? - PullRequest
0 голосов
/ 08 сентября 2011

Я пытаюсь создать галерею изображений:

<card>
 <product catalog="Thread Works">
    <name>AK E001</name>    
    <price>45</price>
    <path>assets\cards\AK_E001.jpg</path>
 </product>

 <product catalog="Paper Work">
     <name>AK E001</name>   
    <price>45</price>
    <path>assets\cards\AK_PP003.jpg</path>
 </product>

<product catalog="Thread Works">
    <name>AK E002</name>    
    <price>50</price>
    <path>assets\cards\AK_E002.jpg</path>
 </product>

Я могу получить доступ к атрибуту, но если я выбираю «Thread Works», я хочу получить доступ только к <product catalog="Thread Works"> с дочерним узлом, для добавления в коллекцию массивов любой справки. Спасибо

Ответы [ 3 ]

3 голосов
/ 08 сентября 2011

См. http://livedocs.adobe.com/flex/3/html/help.html?content=13_Working_with_XML_08.html

в вашем случае:

var x: XML; // заполняем Xml вашими данными

var threadWorks: XML = x.product. (@ Catalog == "Thread Works");

EDIT: Предупреждение: не забывайте. между продуктом и @ каталогом

0 голосов
/ 08 сентября 2011
<?xml version="1.0" encoding="utf-8"?>
<s:WindowedApplication xmlns:fx="http://ns.adobe.com/mxml/2009" 
                       xmlns:s="library://ns.adobe.com/flex/spark" 
                       xmlns:mx="library://ns.adobe.com/flex/mx">
    <fx:Script>
        <![CDATA[
            import mx.collections.ArrayCollection;
            import mx.events.FlexEvent;
            private var mainXML:XML = <card>
                                         <product catalog="Thread Works">
                                            <name>AK E001</name>    
                                            <price>45</price>
                                            <path>assets\cards\AK_E001.jpg</path>
                                         </product>

                                         <product catalog="Paper Work">
                                             <name>AK E001</name>   
                                            <price>45</price>
                                            <path>assets\cards\AK_PP003.jpg</path>
                                         </product>

                                        <product catalog="Thread Works">
                                            <name>AK E002</name>    
                                            <price>50</price>
                                            <path>assets\cards\AK_E002.jpg</path>
                                         </product>
                                        </card>;

            protected function fetchHandler(event:MouseEvent):void
            {
                var productAC:ArrayCollection = new ArrayCollection();
                var productList:XMLList = mainXML.product.(@catalog == attributeNameTxt.text);
                for each(var item:XML in productList)
                {
                    productAC.addItem({name:String(item.name[0]),
                        price:String(item.price[0]),
                        path:String(item.path[0])});
                }
                trace(productAC);
            }

        ]]>
    </fx:Script>
    <s:layout>
        <s:HorizontalLayout/>
    </s:layout>
    <s:TextInput id="attributeNameTxt" text="Thread Works"/>
    <s:Button click="fetchHandler(event);"/>
</s:WindowedApplication>

IMPORTANT CODE : 
=================
mainXML.product.(@catalog == "Thread Works")
0 голосов
/ 08 сентября 2011
function onXmlLoaded (e:Event):void 
{
    xml = XML(e.target.data);
    var xmlLength:Number  = xml.product.length();
    for(var i:uint = 0; i<xmlLength; i++)
    {
            dataContainer.push( {
            catalog : xml.product.@catalog,
            name :  xml..name,
            price : xml..price,
            path : xml..path
        });
    }
    for(i=0;i<dataContainer.length;i++)
    {
           if(dataContainer[i].catalog[0]== "your String"){
                 showName();
           }
    }
}
...