3

次の XML があります。

<items>
    <item>
        <locations>
            <location>
                <latitude>-100</latitude>
                <longitude>10</longitude>
            </location>
            <location>
                <latitude>10</latitude>
                <longitude>10</longitude>
            </location>
        </locations>
    </item>
    <item>
        <locations>
            <location>
                <latitude>10</latitude>
                <longitude>10</longitude>
            </location>
            <location>
                <latitude>10</latitude>
                <longitude>10</longitude>
            </location>
        </locations>
    </item>
<items>

緯度または経度の値が無効なアイテムをカウントする必要があります。

有効な緯度は -90 ~ 90 です。有効な経度は -180 ~ 180 です。

投稿を簡単にするために、-90 より大きい緯度をカウントするようにしましょう。

私は次のことを試しましたが、どれもうまくいきません:

count(//item[locations/location[number(latitude) &gt; -90])
count(//item[locations/location[number(latitude)] &gt; -90)
count(//item[locations/location/*[number(latitude) &gt; -90])
count(//item[locations/location/*[number(latitude)] &gt; -90)
count(//item[locations/location/*[number(name() = latitude)] &gt; -90)
count(//item[locations/location/*number([name() = latitude]) &gt; -90)
count(//item[number(deal/locations/location/*[name()=latitude]) &gt; -90])

これが可能かどうか誰にもわかりますか?そうでない場合、誰かがきちんとした回避策を考えられますか?

よろしくお願いします。

4

1 に答える 1

1

-90未満の緯度が必要です。

例: この xslt を実行する

<xsl:template match="/">
    <GoodItems>
        <xsl:value-of select="count(//item[not(locations/location[number(latitude) &lt; -90 
                                                           or number(latitude) &gt; 90
                                                           or number(longitude) &lt; -180
                                                           or number(longitude) &gt; 180])])" />
    </GoodItems>
    <LatTooSmall>
        <xsl:value-of select="count(//item[locations/location[number(latitude) &lt; -90]])" />
    </LatTooSmall>
    <LatTooBig>
        <xsl:value-of select="count(//item[locations/location[number(latitude) &gt; 90]])" />
    </LatTooBig>
    <LongTooSmall>
        <xsl:value-of select="count(//item[locations/location[number(longitude) &lt; -180]])" />
    </LongTooSmall>
    <LongTooBig>
        <xsl:value-of select="count(//item[locations/location[number(longitude) &gt; 180]])" />
    </LongTooBig>
</xsl:template>

このテスト ケース xml ドキュメントに対して:

<items>
    <item>
        <locations>
            <location>
                <latitude>10</latitude>
                <longitude>10</longitude>
            </location>
        </locations>
    </item>
    <item>
        <locations>
            <location>
                <latitude>-100</latitude>
                <longitude>10</longitude>
            </location>
        </locations>
    </item>
    <item>
        <locations>
            <location>
                <latitude>123</latitude>
                <longitude>10</longitude>
            </location>
        </locations>
    </item>
    <item>
        <locations>
            <location>
                <latitude>0</latitude>
                <longitude>-200</longitude>
            </location>
        </locations>
    </item>
    <item>
        <locations>
            <location>
                <latitude>0</latitude>
                <longitude>500</longitude>
            </location>
        </locations>
    </item>
</items>

以下を返します。

<GoodItems>1</GoodItems>
<LatTooSmall>1</LatTooSmall>
<LatTooBig>1</LatTooBig>
<LongTooSmall>1</LongTooSmall>
<LongTooBig>1</LongTooBig>

xslt 2 がある場合も使用できabs()ますが、Dimitre は 1.0 で回避策を提供しています。

于 2012-11-02T12:52:31.690 に答える