所以我有这个
XML结构:
<Items> <Item name="aaa"> <ProductRanges> <ProductRange id="1" /> </ProductRanges> </Item> <Item name="bbb"> <ProductRanges> <ProductRange id="2" /> </ProductRanges> </Item> <Item name="ccc"> <ProductRanges> <ProductRange id="1" /> <ProductRange id="2" /> </ProductRanges> </Item> </Items>
使用以下E4X查询,我只获得项目“aaa”和项目“bbb”.
trace( Items.Item.(descendants("ProductRange").@id == "1" || descendants("ProductRange").@id == "2") );
但是,我可以理解为什么我没有看到项目“ccc”,因为它是两个id =“1”&& “2”
所以不确定这里应该是什么正确的查询,即使后代是正确的技术.
我不想结束长时间的额外id =“1”&& id =“2”查询要么是因为我有这些值的无限组合(“2”和“&”3“,”1“和&&”2“&&”3“)等.
任何想法都会有所帮助..
谢谢
所以Patrick用这个表达式解决了这个问题
xml.Item.(descendants('ProductRange').(@id=="1" || @id=="2").length()>0);
但是,更进一步,如何动态创建@id值,因为这将是一个不断变化的查询,具体取决于用户选择.
像这样的东西(但这,但这不起作用):
var attributeValues:String = "@id==\"1\" || @id==\"2\" || @id==\"3\" || @id==\"4\""; xml.Item.(descendants('ProductRange').(attributeValues).length()>0);
更多的想法帕特里克..任何人?
谢谢
解决方法
对于或搜索,您可以简单地执行:
xml.Item.(descendants('ProductRange').(@id=="1" || @id=="2").length()>0);
var xml:XML=<Items> <Item name="aaa"> <ProductRanges> <ProductRange id="1" /> </ProductRanges> </Item> <Item name="bbb"> <ProductRanges> <ProductRange id="2" /> </ProductRanges> </Item> <Item name="ccc"> <ProductRanges> <ProductRange id="1" /> <ProductRange id="3" /> <ProductRange id="2" /> </ProductRanges> </Item> </Items>; function andSearch(node:XMLList,searchFor:Array) { var mask:int = 0; var match:int = (1 << searchFor.length ) - 1; var fn:Function = function(id:String) { var i:int = searchFor.indexOf(id); if (i >= 0) { mask = mask | (1<<i); } return mask==match; } node.(ProductRange.(fn(@id))); return mask==match; } trace( xml.Item.( andSearch( ProductRanges,["1","2"] ) ) );
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。