これは現在のところバグである可能性があると思いますが、修正されるまで機能させる方法があります。
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 の場合、空のハッシュに変換されます。サーバーでは、変数はハッシュへのポインターです。ポインターを文字列に強制してチェックできるため、ノード値がゼロの場合を処理できます。