价格转负为正

  • 本文关键字: xml xslt xpath xslt-1.0
  • 更新时间 :
  • 英文 :


我必须在XSL 1.0中编写一个小的通用转换,当Book Name涉及'NC'时将负价格转换为正价格。价格可以出现在多个/任何水平。我必须遇到负号,然后把它变成正的。请建议。

XML——

<Books>
 <Book>
  <Name>NC</Name>
  <Price>-100.50</Price>
 </Book>
 <Book>
  <Name>B1</Name>
  <Pr>450.60</Pr>
 </Book>
 <Book>
  <Name>C1</Name>
  <Price>35.20</Price>
 </Book>
 <Book>
  <Name>D1</Name>
  <P>5</P>
 </Book>
</Books>

如果您想使用一个小于零的数字来定义Price元素,它属于Name为'NC'的Book元素。在本例中,您只需要下面的模板match

<xsl:template match="Book[Name='NC']/Price[number(.) &lt; 0]/text()">

然后您可以添加代码将负值变为正值。

尝试下面的XSLT

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
  <xsl:output method="xml" indent="yes" />
  <xsl:template match="@*|node()">
    <xsl:copy>
      <xsl:apply-templates select="@*|node()"/>
    </xsl:copy>
  </xsl:template>
 <xsl:template match="Book[Name='NC']/Price[number(.) &lt; 0]/text()">
    <xsl:value-of select="format-number(0 - number(.), '0.00')" />
</xsl:template>
</xsl:stylesheet>

应用到XML时,输出如下

<Books>
   <Book>
      <Name>NC</Name>
      <Price>100.50</Price>
   </Book>
   <Book>
      <Name>B1</Name>
      <Pr>450.60</Pr>
   </Book>
   <Book>
      <Name>C1</Name>
      <Price>35.20</Price>
   </Book>
   <Book>
      <Name>D1</Name>
      <P>5</P>
   </Book>
</Books>

注意使用恒等转换来复制现有的元素。

相关内容

  • 没有找到相关文章

最新更新