【问题标题】:Finding the value of an XML node in an array在数组中查找 XML 节点的值
【发布时间】:2013-03-27 18:25:52
【问题描述】:

为什么@assigned 总是 0?

var gates:XML = <gates>
    <gate_id>
      10991
    </gate_id>
    <gate_id>
      10999
    </gate_id>
    <gate_id>
      11000
    </gate_id>
    <gate_id>
      11001
    </gate_id>
  </gates>;

var assignedGateIds:Array = ["10991","10999"];

for each(var xgate:XML in gates..gate_id){
    var gateId:String = xgate.text();

    if(assignedGateIds.indexOf(xgate.text())>-1){
        xgate.@assigned = 1;
    }else{
        xgate.@assigned = 0;
    }
}

【问题讨论】:

  • 为 xgate.text() 添加跟踪以查看返回的内容。
  • 10991 10999 11000 11001

标签: actionscript-3 apache-flex e4x


【解决方案1】:

很简单,因为 text() 函数返回的不是字符串而是对象。当您使用跟踪时,它会被转换为字符串,但如果您检查 trace(getQualifiedSuperclassName(xgate.text()));,您会看到它返回一个对象。

为了解决这个问题,我通常使用 trace(getQualifiedSuperclassName(xgate.text()+'')); 并强制为字符串,也可以使用as String

var gates:XML = <gates>
    <gate_id>
      10991
    </gate_id>
    <gate_id>
      10999
    </gate_id>
    <gate_id>
      11000
    </gate_id>
    <gate_id>
      11001
    </gate_id>
  </gates>;

var assignedGateIds:Array = ["10991","10999"];

for each(var xgate:XML in gates..gate_id){
    var gateId:String = xgate.text();

    if(assignedGateIds.indexOf(xgate.text()+"")>-1){ // <- added +'' here
        xgate.@assigned = 1;
    }else{
        xgate.@assigned = 0;
    }
}

【讨论】:

    【解决方案2】:

    改变

        if(assignedGateIds.indexOf(xgate.text())>-1){
    

        if(assignedGateIds.indexOf(gateId)>-1){
    

    或到

        if(assignedGateIds.indexOf(String(xgate.text()))>-1){
    

    或到

        if(assignedGateIds.indexOf(xgate.text().toString())>-1){
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-04-25
      • 2018-09-09
      • 1970-01-01
      • 2022-01-17
      • 1970-01-01
      • 1970-01-01
      • 2018-10-21
      • 1970-01-01
      相关资源
      最近更新 更多