我正在尝试在 as3 中搜索此 XML 文档
<mineral>
<name>Calcite</name>
<color>White</color
<diaphaneity>Opaque</diaphaneity>
</mineral>
<mineral>
<name>Spangolite</name>
<color>Blue</color>
<color>Green</color>
<color>Blue Green</color>
<color>Dark Green</color>
<color>Emerald Green</color>
<diaphaneity>Transparent</diaphaneity>
<diaphaneity>Translucent</diaphaneity>
</mineral>
<mineral>
<name>Barite</name>
<color>Yellow</color>
<color>Honey</color>
<diaphaneity>Transparent</diaphaneity>
<diaphaneity>Translucent</diaphaneity>
<diaphaneity>Opaque</diaphaneity>
</mineral>
<mineral>
<name>Landauite</name>
<color>White</color>
<diaphaneity>Transparent</diaphaneity>
<diaphaneity>Translucent</diaphaneity>
</mineral>
<mineral>
<name>Sapphire</name>
<color>Blue</color>
<color>Blue green</color>
<diaphaneity>Transparent</diaphaneity>
<diaphaneity>Translucent</diaphaneity>
</mineral>
并首先按颜色过滤结果。因此,如果您搜索“蓝色”,您将获得所有包含“颜色”元素且值为“蓝色”的矿物(Spangolite 和 Sapphire)的结果。
我加载我的 XML 并创建一个包含所有元素的 XMLList。
var dataLoader:URLLoader = new URLLoader();
var xmlData:XML;
dataLoader.addEventListener(Event.COMPLETE, LoadComplete);
dataLoader.load(new URLRequest("mineralXML.xml"));
function LoadComplete(e:Event):void
{
xmlData = new XML(e.target.data);
ParseMinerals(xmlData);
}
function ParseMinerals(mineralXML:XML):void
{
var mineralList:XMLList = mineralXML.mineral;
trace(mineralList);
}
使用“trace(mineralList)”命令,它将成功跟踪整个 XML 文件,如果我将其更改为“trace(xmlData.mineral.(color == "White"));” 然后它会追踪所有节点的值为“White”的元素。
<mineral>
<name>Calcite</name>
<color>White</color>
<diaphaneity>Opaque</diaphaneity>
</mineral>
<mineral>
<name>Landauite</name>
<color>White</color>
<diaphaneity>Transparent</diaphaneity>
<diaphaneity>Translucent</diaphaneity>
</mineral>
但是,如果我搜索蓝色而不是白色,它不会追踪任何内容。我猜这是因为包含“蓝色”值的元素的矿物节点也有多个其他颜色值。这是我试图评估的问题。
我需要能够搜索一种颜色并拉出具有这些颜色值之一的所有节点,而不管是否具有其他颜色值。