Flex e4x - Selección por múltiples atributos
-
19-09-2019 - |
Pregunta
<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>
Quiero seleccionar un XMLList de nodos por este criterio
<Projects>.<project>.@name = x && <Projects>.<project>.<characteristics>.<characteristic>.<options>.<option>.(@name == y && @value == z)
En esencia consulta por ambos atributos [nombre y valor] para un nombre determinado proyecto
Solución
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()
);
ACTUALIZACIÓN: En caso de que desee obtener la etiqueta de proyecto en lugar de la opción etiqueta:
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>;
El 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()
);
La salida:
<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>
Otros consejos
@Amarghosh Su consulta no devuelve el proyecto de esperar en este caso en la lista de nodos <option>
son los mismos entre los nodos <characteristic>
Estoy tratando de seleccionar el proyecto donde
<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") ;
Aquí es el 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>
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow