0

我试图从一个元素中获取一个值,问题是该元素可以出现多次并且没有嵌套在我需要比较的另一个元素中。

这是我的 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 的值,但仅适用于等于 001 的 spp_code,但是正如您所见,元素 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 版本 1.0,因为我在 Unix 上使用 xsltproc 进行解析

4

1 回答 1

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>

我希望这有帮助。

于 2013-10-23T18:58:29.807 回答