我相信这目前可能是一个错误,但我有办法让它工作,直到它得到修复。
示例 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 时,它被转换为一个空的散列。在服务器上,该变量是指向散列的指针。因为我们可以强制指针指向一个字符串并检查它,所以我们可以处理节点值为零的情况。