1

我在应用程序中使用 XML 数据源。称为的字段之一quantity有时为零,因此:

<quantity>0</quantity>

但是,当我尝试获取该值时,JSON 数据结构中的实际值不是0,它只是不存在。其他字段与其中的$t元素一起显示,但这个没有:

'item' :{
  'quantity' :{},
  'name' :{'$t' : 'ItemName'}
}

我想pick()取出那个值并确定它是否是一个正数(如果它为零,我会做其他事情)。我怎样才能做到这一点?

编辑:当有一个正常的数值时,XML 看起来像这样

<quantity>100</quantity>

JSON看起来像这样

'quantity' :{'$t' :100}

这是应该的。

4

1 回答 1

2

我相信这目前可能是一个错误,但我有办法让它工作,直到它得到修复。

示例 XML:

<?xml version="1.0" encoding="UTF-8"?>
<query xmlns:yahoo="http://www.yahooapis.com/v1/base.rng"
    yahoo:count="0" yahoo:created="2010-11-24T18:16:40Z" yahoo:lang="en-US">
    <diagnostics>
        <user-time>858</user-time>
        <service-time>0</service-time>
        <build-version>9847</build-version>
    </diagnostics> 
    <results/>
</query>

示例 KRL:

ruleset a60x435 {
  meta {
    name "xml test"
    description <<
      testing xml node values that are 0
    >>
    author "Mike Grace"
    logging on
  }

  global {
    dataset testXml:XML <- "http://dl.dropbox.com/u/1446072/apps/test/test1.xml" cachable for 1 month;
  }

  rule getting_zero_value_from_xml_node {
    select when pageview ".*"
    pre {
      nodeValue = testXml.pick("$..service-time.$t");
      testValue = "#{nodeValue}".replace(re/(ARRAY).*/,"$1");
      nodeValue = (testValue eq "ARRAY") => 0 | nodeValue;
    }
    {
      notify("nodeValue",nodeValue) with sticky = true;
    }
  }
}

解释:

  • 从数据集或数据源中选择节点值
  • 强制变量转换为字符串并检查'ARRAY'
  • 如果找到 'ARRAY' 字符串,则将原始变量的值设置为 0

当一个 XML 节点被转换为 JSON 并且值为 0 时,它被转换为一个空的散列。在服务器上,该变量是指向散列的指针。因为我们可以强制指针指向一个字符串并检查它,所以我们可以处理节点值为零的情况。

于 2010-11-25T08:10:35.957 回答