1

アプリで XML データソースを使用しています。呼び出されるフィールドの 1 つがquantityゼロの場合があるため、次のようになります。

<quantity>0</quantity>

ただし、その値を取得しようとすると、JSON データ構造の実際の値は ではなく0、存在しないだけです。他のフィールドは$tその中に要素が表示されますが、これは表示されません:

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

pick()その値を取り出して、それが正の数かどうかを判断したいと思います (0 の場合は別のことを行います)。どうやってやるの?

EDIT:通常の数値がある場合、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 に答える