0

我必须在 XSL 1.0 中编写一个小的通用转换,当书名涉及“NC”时,将负价格变为正价格。价格可以出现在多个/任何级别。对于任何类型的 XML,我都必须遇到负号并将其变为正号。请建议。

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>
4

1 回答 1

1

如果您希望文本价格元素的数字小于零,则属于名称为“NC”的 Book 元素。在这种情况下,您只需要以下模板匹配

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

请注意使用恒等变换来复制现有元素。

于 2013-04-23T12:37:17.650 回答