XSLT - 在XML上解析1个元素,该元素具有2个相同名称的元素

时间:2013-10-23 18:39:26

标签: xml parsing xslt

我正在尝试从元素中获取值,问题是元素可能会出现多次而且没有嵌套在我需要比较的另一个元素中。

这是我的XML的一部分:

<sim_pur_pric>
  <spp_code>001</spp_code> 
  <spp_price>213.0136</spp_price> 
  <spp_unit>ea</spp_unit> 
  <spp_curr>USD</spp_curr> 
  <spp_cost_comp>001</spp_cost_comp> 
  </sim_pur_pric>
<sim_pur_pric>
  <spp_code>005</spp_code> 
  <spp_price>212.498553</spp_price> 
  <spp_unit>ea</spp_unit> 
  <spp_curr>USD</spp_curr> 
  <spp_cost_comp>001</spp_cost_comp> 
  </sim_pur_pric>
  <storage_conditions /> 
  <cust_po />

我需要得到的是spp_price的值,但仅限于spp_code等于001,但是你可以看到元素sim_pur_pric对于不同的spp_code出现两次。

这就是我的xsl(部分内容):

<xsl:template match="sim_pur_pric">
  <xsl:choose>
    <xsl:when test="spp_code"='001'">
      <xsl:choose>
        <xsl:when test="string-length(spp_price) != 0">
          <xsl:value-of select='spp_price'/><xsl:text>|</xsl:text>
        </xsl:when>
        <xsl:otherwise>
          <xsl:text>0|</xsl:text>
        </xsl:otherwise>
      </xsl:choose>
    </xsl:when>
    <xsl:otherwise>
      <xsl:text>0|</xsl:text>
    </xsl:otherwise>
  </xsl:choose>
</xsl:template>

然而它不起作用...... :(你们中的任何一个人都知道我怎么能得到我想要的价值?我很感激你的时间和帮助

最后一件事,它必须是XSL Version 1.0,因为我在Unix上使用xsltproc解析

1 个答案:

答案 0 :(得分:0)

您所拥有的问题只能在“sim_pur_pric”模板之外修复。目前,它适用于“sim_pur_pric”节点。您需要XPath来测试是否存在有效的“sim_pur_pric”节点。

<xsl:apply-template match="sim_pur_pric">

被替换为这样的东西:

<xsl:choose>
   <xsl:when test="sim_pur_price[spp_code='001' and string-length(spp_price) != 0]">
     <xsl:value-of select="sim_pur_price[spp_code='001']"/><xsl:text>|</xsl:text>
   </xsl:when>
   <xsl:otherwise>
      <xsl:text>0|</xsl:text>
   </xsl:otherwise>
</xsl:choose>

我希望这会有所帮助。