flex XML 节点查找

时间:2023-01-29 20:46:32
XML中每个元素都有个唯一的id值作为属性,怎样根据id值在整个xml范围内查找?
例如

    <elem id="dog">
      <elem>  
          ...
             <elem id="cat" age=8>
          ...
      </elem>
   </elem>


有什么方法可以马上定位到cat节点?谢谢

19 个解决方案

#1


你的xml.elem.(@id="cat")

#2


如果还要找cat里面的子结点的话就用:
你的xml.elem.(@id=="cat")[0].子结点名字

(上面的@id=="cat"是两个等号)

#3


能不能一次性在整个范围内查找
必须遍历吗

#4


这不是遍历,定位到id的名字了就是直接查找啊,如果你这里面就一个id==cat的 
这个xml.elem.(@id=="cat")[0]就是你要的!

#5


这就是查找的整个范围
@id=="cat"就是查找条件

#6


事先不知道cat的位置的

#7


上面只是个例子,cat可能被套在n层内我的意思是,但id保证是唯一的

#8


这就是不知道位置取出来的!

#9


xml.elem.(@id=="cat")[0]就是你要的

#10


恩我试试。里面也不全是elem.好了就给分。

#11


不一定是elem 也可以这么写
xml.*.(@id=="cat")[0]

#12


用descendants解决了
xml.*.(@id=="cat")[0] 的"*"也表示任意层后裔么

#13


我记得不是

#14


不是直接有运算符是支持全局查找的吗? help里就有啊。
用..运算符,作用是在所有子目录中查找结点;
xml..elem.(@id == "cat")[0];

*是通配符,只是当你不确定结点名称的时候才用,例如你只知道有个结点的id属性是cat,但不知道是哪一个,就可以用 
var cat:XML = xml..*.(@id == "cat")[0];
然后可以通过cat.name()得到结点名;

不过给你一点建议,当你的xml结构很复杂,例如结构很深的时候,而你又需要频繁使用..运算符,最好是把所有结点先存入一个map中,以后直接通过id获得结点,否则会很慢,flex的XML查找并不是很高效的,他内部也是递归的。

#15


引用 14 楼 herowach 的回复:
不是直接有运算符是支持全局查找的吗? help里就有啊。
用..运算符,作用是在所有子目录中查找结点;
xml..elem.(@id == "cat")[0];

*是通配符,只是当你不确定结点名称的时候才用,例如你只知道有个结点的id属性是cat,但不知道是哪一个,就可以用
var cat:XML = xml..*.(@id == "cat")[0];
然后可以通过cat.name()得到结点名;

不过给你一点建议,当你的xml结构很复杂,例如结构很深的时候,而你又需要频繁使用..运算符,最好是把所有结点先存入一个map中,以后直接通过id获得结点,否则会很慢,flex的XML查找并不是很高效的,他内部也是递归的。

#16


c蹭分

#17


谢谢各位的解答与建议

#18


XML的?我也在搞..可惜不怎么会,郁闷中

#19


我也是同样问题,不过还是有点问题。。

#1


你的xml.elem.(@id="cat")

#2


如果还要找cat里面的子结点的话就用:
你的xml.elem.(@id=="cat")[0].子结点名字

(上面的@id=="cat"是两个等号)

#3


能不能一次性在整个范围内查找
必须遍历吗

#4


这不是遍历,定位到id的名字了就是直接查找啊,如果你这里面就一个id==cat的 
这个xml.elem.(@id=="cat")[0]就是你要的!

#5


这就是查找的整个范围
@id=="cat"就是查找条件

#6


事先不知道cat的位置的

#7


上面只是个例子,cat可能被套在n层内我的意思是,但id保证是唯一的

#8


这就是不知道位置取出来的!

#9


xml.elem.(@id=="cat")[0]就是你要的

#10


恩我试试。里面也不全是elem.好了就给分。

#11


不一定是elem 也可以这么写
xml.*.(@id=="cat")[0]

#12


用descendants解决了
xml.*.(@id=="cat")[0] 的"*"也表示任意层后裔么

#13


我记得不是

#14


不是直接有运算符是支持全局查找的吗? help里就有啊。
用..运算符,作用是在所有子目录中查找结点;
xml..elem.(@id == "cat")[0];

*是通配符,只是当你不确定结点名称的时候才用,例如你只知道有个结点的id属性是cat,但不知道是哪一个,就可以用 
var cat:XML = xml..*.(@id == "cat")[0];
然后可以通过cat.name()得到结点名;

不过给你一点建议,当你的xml结构很复杂,例如结构很深的时候,而你又需要频繁使用..运算符,最好是把所有结点先存入一个map中,以后直接通过id获得结点,否则会很慢,flex的XML查找并不是很高效的,他内部也是递归的。

#15


引用 14 楼 herowach 的回复:
不是直接有运算符是支持全局查找的吗? help里就有啊。
用..运算符,作用是在所有子目录中查找结点;
xml..elem.(@id == "cat")[0];

*是通配符,只是当你不确定结点名称的时候才用,例如你只知道有个结点的id属性是cat,但不知道是哪一个,就可以用
var cat:XML = xml..*.(@id == "cat")[0];
然后可以通过cat.name()得到结点名;

不过给你一点建议,当你的xml结构很复杂,例如结构很深的时候,而你又需要频繁使用..运算符,最好是把所有结点先存入一个map中,以后直接通过id获得结点,否则会很慢,flex的XML查找并不是很高效的,他内部也是递归的。

#16


c蹭分

#17


谢谢各位的解答与建议

#18


XML的?我也在搞..可惜不怎么会,郁闷中

#19


我也是同样问题,不过还是有点问题。。

#20