【问题标题】:Flex e4x - select by multiple attributesFlex e4x - 通过多个属性选择
【发布时间】:2010-01-06 15:19:49
【问题描述】:
<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

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

本质上是通过两个属性 [名称和值] 查询给定项目名称

【问题讨论】:

  • +1。感谢您提出这个问题:我学到了一些 e4x 试图回答这个问题。
  • 感谢您花时间详细解释:)

标签: xml apache-flex flash actionscript-3 e4x


【解决方案1】:
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()
);

更新:以防万一您想获取项目标签而不是选项标签:

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").@value == "False").toXMLString());

//broken down to fit in the screen
trace(
  xml.projects.project.(
    @name == "EFM 1" && characteristics.characteristic.options.option.(
      @name == "Other"
    ).@value == "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>

【讨论】:

  • @Amarghosh 您的查询在特殊情况下会失败。请看下文。
【解决方案2】:

@Amarghosh 在&lt;option&gt; 节点列表在&lt;characteristic&gt; 节点之间相同的情况下,您的查询不会返回预期的项目

我正在尝试选择项目所在的项目

<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).@value == "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>

【讨论】:

  • prjCharacteristicsFilters的值是多少?
猜你喜欢
  • 2011-02-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-07-20
  • 2020-04-11
相关资源
最近更新 更多