1

xml ファイルの結果をフィルタリングしようとしています。フィルタリングを依頼されたフィールドの 1 つは、各ノードの属性 price です。問題は、xml がスペイン語のソースからのものであり、価格の小数点記号が ではなく であることです。桁区切り記号は ではなく です。

指定された価格よりも低い価格のノードのみが表示される、フィルタリングされた xml ファイルを取得しようとしています。

XML 構造は次のとおりです。

<RoomStays>
    <RoomStay InfoSource="" Price="201,60" Discount="0" MealPlan="Sólo alojamiento" MealPlanId="1" Provider="Marsol" ProviderId="3" HotelName="HOTEL LA ESTACION" Rating="" Latitud="" Longitud=""> 
    <RoomStay InfoSource="" Price="1.234,75" Discount="0" MealPlan="Sólo alojamiento" MealPlanId="1" Provider="Marsol" ProviderId="3" HotelName="HOTEL LA ESTACION" Rating="" Latitud="" Longitud=""> 
    ....More nodes
</RoomStays>

XPath と Linq2Xml を使用してフィルター処理を試みました。を に置き換えなければならないという結論に達しました。と 。で、しかし、結果は0です。

のみがある 1000 未満の値では、次を使用して取得しました。

doc.XPathSelectElements(./RoomStays/RoomStay[translate(@Price,',','.')<=256.78])

ただし、1000 を超える価格がある場合は、千単位の区切り記号を使用します。うまくいかないので、私は試しました:

doc.XPathSelectElements(./RoomStays/RoomStay[translate(translate(@Price,'.',''),',','.')<=256.78])

しかし、それは0の結果を返します(翻訳の代わりにreplace関数を使用して.文字を削除しようとしましたが、例外が発生しました)。

これを取得する別の方法がある場合でも、誰かが私を助けることができれば、私は立ち往生しています(必ずしもXPathではありません)。

前もって感謝します。

4

1 に答える 1

0

使用:

translate(@Price, ',.', '.')

これにより、any が削除され、 '.'any',''.'

XSLT ベースの検証:

<xsl:stylesheet version="1.0"
 xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
 <xsl:output omit-xml-declaration="yes" indent="yes"/>
 <xsl:strip-space elements="*"/>

 <xsl:template match="/">
     <xsl:copy-of select=
      "/RoomStays/RoomStay[not(translate(@Price, ',.', '.') > 256.78)]"/>
 </xsl:template>
</xsl:stylesheet>

この変換が提供された XML ドキュメントに適用されると、次のようになります。

<RoomStays>
    <RoomStay InfoSource="" Price="201,60" Discount="0" MealPlan="Sólo alojamiento" MealPlanId="1" Provider="Marsol" ProviderId="3" HotelName="HOTEL LA ESTACION" Rating="" Latitud="" Longitud=""/>
    <RoomStay InfoSource="" Price="1.234,75" Discount="0" MealPlan="Sólo alojamiento" MealPlanId="1" Provider="Marsol" ProviderId="3" HotelName="HOTEL LA ESTACION" Rating="" Latitud="" Longitud=""/>
    ....More nodes
</RoomStays>

XPath 式が評価され、選択されたノード (この場合は 1 つだけ) が出力にコピーされます

<RoomStay InfoSource="" Price="201,60" Discount="0" MealPlan="Sólo alojamiento" MealPlanId="1" Provider="Marsol" ProviderId="3" HotelName="HOTEL LA ESTACION" Rating="" Latitud="" Longitud="" />
于 2012-06-07T13:35:39.877 に答える