1

我正在尝试过滤 xml 文件的结果。我被要求过滤的字段之一是每个节点的属性价格。问题是 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 结果(我尝试使用替换功能而不是翻译来删除 . 字符,但我得到一个异常)。

所以我被困住了,如果有人可以帮助我,即使有另一种方法(不一定是 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 表达式并将选定节点(在本例中只有一个)复制到输出

<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 回答