XSLT是显著更合适的不是XQuery来使用这类任务的:
这种转变:
<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="node()|@*">
<xsl:copy>
<xsl:apply-templates select="node()|@*"/>
</xsl:copy>
</xsl:template>
<xsl:template match="price/text()">
<xsl:value-of select="format-number(. + 0.50, '##0.00')"/>
</xsl:template>
</xsl:stylesheet>
时所提供的XML文档应用:
<books>
<book asin="0201100886" created="128135928" lastLookupTime="128135928">
<price>102.00</price>
<purchaseDate>2005-01-22</purchaseDate>
</book>
<book asin="0122513363" created="128135600" lastLookupTime="128136224">
<price>50.95</price>
<purchaseDate>2005-01-22</purchaseDate>
</book>
<book asin="0201441241" created="128136896" lastLookupTime="128136896">
<price>108.20</price>
<purchaseDate>2005-01-22</purchaseDate>
</book>
<book asin="0471250600" created="128136896" lastLookupTime="128136896">
<price>107.95</price>
<purchaseDate>2005-01-22</purchaseDate>
</book>
<book asin="0321193628" created="128136896" lastLookupTime="128136896">
<price>112.40</price>
</book>
</books>
产生想要的,正确的结果:
<books>
<book asin="0201100886" created="128135928" lastLookupTime="128135928">
<price>102.50</price>
<purchaseDate>2005-01-22</purchaseDate>
</book>
<book asin="0122513363" created="128135600" lastLookupTime="128136224">
<price>51.45</price>
<purchaseDate>2005-01-22</purchaseDate>
</book>
<book asin="0201441241" created="128136896" lastLookupTime="128136896">
<price>108.70</price>
<purchaseDate>2005-01-22</purchaseDate>
</book>
<book asin="0471250600" created="128136896" lastLookupTime="128136896">
<price>108.45</price>
<purchaseDate>2005-01-22</purchaseDate>
</book>
<book asin="0321193628" created="128136896" lastLookupTime="128136896">
<price>112.90</price>
</book>
</books>
你必须使用XQuery来做这件事,还是可以使用XSLT? – 2011-05-01 16:55:00
好问题,+1。请参阅我的回答以获取建议和完整的,非常短的XSLT解决方案:) – 2011-05-01 16:58:40
我必须使用xQuery。 – zach 2011-05-01 23:31:32