解析的XML数据源无法识别“0”值

时间:2010-11-25 08:01:06

标签: xml json krl

我在应用中使用XML数据源。其中一个名为quantity的字段有时为零,因此:

<quantity>0</quantity>

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

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

我想pick()输出该值,并确定它是否为正数(如果它为零,我会做其他事情)。我怎么能这样做?

编辑:当存在正常数值时,XML看起来像这样

<quantity>100</quantity>

,JSON看起来像这样

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

这应该是这样的。

1 个答案:

答案 0 :(得分: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时,它将变为空哈希。在服务器上,变量是指向哈希的指针。因为我们可以强制指针指向字符串并检查它,然后我们可以在节点值为零时处理这种情况。