Flex的E4X - 由多个属性选择

问题描述:

<EFM> 
    <projects> 
     <project name="EFM Columbus Supply Chain Project"> 
      <characteristics> 
       <characteristic name="Types of Data"> 
        <textDescription></textDescription> 
        <options> 
         <option name="Commodity Flow" value="True"/> 
         <option name="Industry Assets" value="False"/> 
         <option name="Trade Data" value="True"/> 
         <option name="Infrastructure" value="False"/> 
         <option name="Economic Data" value="False"/> 
         <option name="Benefits Information" value="True"/> 
         <option name="Supply Chain Event Data" value="False"/> 
         <option name="Physical Movement Data" value="False"/> 
         <option name="Other" value="True"/> 
        </options> 
       </characteristic> 
      </characteristics> 
    </project> 
    </projects> 
</EFM> 

我想通过这个标准来选择节点的XMLList通过这两个属性[名称和值对于一个给定的项目名称Flex的E4X - 由多个属性选择

+0

+1。感谢您提出这个问题:我学到了一些e4x试图回答这个问题。 – Amarghosh 2010-01-06 16:51:48

+0

感谢您花时间详细解释:) – captonssj 2010-01-07 15:52:23

trace(xml.projects.project.(@name == "EFM Columbus Supply Chain Project").characteristics.characteristic.options.option.(@name == "Other" && @value == "True").toXMLString()); 

//traces <option name="Other" value="True"/> 

//broken down to fit in the screen: 
trace(
    xml.projects.project.(
    @name == "EFM Columbus Supply Chain Project" 
).characteristics.characteristic.options.option.(
     @name == "Other" && @value == "True" 
).toXMLString() 
); 

<Projects>.<project>[email protected] = x && <Projects>.<project>.<characteristics>.<characteristic>.<options>.<option>.(@name == y && @value == z) 

本质上查询


更新:万一你想获得该项目的标签,而不是选项标签:

var xml:XML = 
<EFM> 
    <projects> 
    <project name="EFM 1" id="wrong"> 
     <characteristics> 
     <characteristic name="Types of Data"> 
      <options> 
      <option name="Benefits Information" value="True"/> 
      <option name="Supply Chain Event Data" value="False"/> 
      <option name="Physical Movement Data" value="False"/> 
      <option name="Other" value="True"/> 
      </options> 
     </characteristic> 
     </characteristics> 
    </project> 
    <project name="EFM 1" id="right"> 
     <characteristics> 
     <characteristic name="Types of Data"> 
      <options> 
      <option name="Benefits Information" value="True"/> 
      <option name="Supply Chain Event Data" value="False"/> 
      <option name="Physical Movement Data" value="False"/> 
      <option name="Other" value="False"/> 
      </options> 
     </characteristic> 
     </characteristics> 
    </project> 
    <project name="EFM 2" id="wrong"> 
     <characteristics> 
     <characteristic name="Types of Data"> 
      <options> 
      <option name="Benefits Information" value="True"/> 
      <option name="Supply Chain Event Data" value="False"/> 
      <option name="Physical Movement Data" value="False"/> 
      <option name="Other" value="False"/> 
      </options> 
     </characteristic> 
     </characteristics> 
    </project> 
    </projects> 
</EFM>; 

的E4X:

trace(xml.projects.project.(@name == "EFM 1" && characteristics.characteristic.options.option.(@name == "Other")[email protected] == "False").toXMLString()); 

//broken down to fit in the screen 
trace(
    xml.projects.project.(
    @name == "EFM 1" && characteristics.characteristic.options.option.(
     @name == "Other" 
    )[email protected] == "False" 
).toXMLString() 
); 

输出:

<project name="EFM 1" id="right"> 
    <characteristics> 
    <characteristic name="Types of Data"> 
     <options> 
     <option name="Benefits Information" value="True"/> 
     <option name="Supply Chain Event Data" value="False"/> 
     <option name="Physical Movement Data" value="False"/> 
     <option name="Other" value="False"/> 
     </options> 
    </characteristic> 
    </characteristics> 
</project> 
+0

@Amarghosh您的查询在特例中失败。请看下面。 – captonssj 2010-01-12 15:16:23

@Amarghosh您的查询并不在此情况下<option>节点列表是<characteristic>之间相同的回报预期的项目节点

我想选择项目,其中

<characteristics>.<characteristic>.(@name == "Frequency of Data Sharing") 
    && <characteristics>.<characteristic>.<options>.<option>.(@Near Real Time == "True") 

    using the query 

    projectsXML.projects.project.(
    characteristics.characteristic.(@name == prjCharacteristicsFilter) 
    && characteristics.characteristic.options.option.(@name == s)[email protected] == "True") ; 

这里是XML:

<EFM> 
    <projects> 

    <project id="2" name="EFM Columbus Supply Chain Project"> 
     <characteristics> 

     <characteristic name="Frequency of Data Sharing" projectPropertyName="sharingFreqArrayColl"> 
      <textDescription></textDescription> 
      <options> 
      <option name="Near Real Time" value="True"/> 
      <option name="Hourly" value="False"/> 
      <option name="Daily" value="False"/> 
      <option name="Periodically" value="False"/> 
      <option name="One Time" value="False"/> 
      </options> 
     </characteristic> 

     <characteristic name="Frequency of Update of Data" projectPropertyName="updateFreqArrayColl"> 
      <textDescription></textDescription> 
      <options> 
      <option name="Near Real Time" value="False"/> 
      <option name="Hourly" value="True"/> 
      <option name="Daily" value="False"/> 
      <option name="Periodically" value="False"/> 
      <option name="One Time" value="False"/> 
      </options> 
     </characteristic> 
     </characteristics> 
    </project> 

    </projects> 
</EFM> 
+0

'prjCharacteristicsFilter'和's'的值是什么? – Amarghosh 2010-01-12 15:29:55

+0

“数据共享频率” – captonssj 2010-02-07 19:46:49