'abs()'是一个未知的XSLT函数

时间:2012-05-23 16:25:08

标签: xml c#-4.0 xslt

我喜欢XSLT:

<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:fo="http://www.w3.org/1999/XSL/Format" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:fn="http://www.w3.org/2005/xpath-functions">
.......
<xsl:value-of select="format-number(abs(QUANTITY), '#')"/>
....

与Altova XMLSpy等工具完美配合,但当我尝试从.Net进行转换时:

XslTransform myXslTransform = new XslTransform();
myXslTransform.Load("some.xls");
myXslTransform.Transform(@"inputxml", @"c:\out.csv");

抛出异常

System.Xml.Xsl.XsltException was unhandled
  Message='abs()' is an unknown XSLT function.
  Source=System.Data.SqlXml

我知道ABS是一个很简单的实现功能,但问题是为什么它会发生在.Net?

有人有任何想法吗?

2 个答案:

答案 0 :(得分:5)

abs函数是XPath 2.0版的一部分,并且支持在Saxon,AltovaXML和XMLPrime等XSLT 2.0处理器中。 Microsoft的XSLT处理器(MSXML 3,4,5,6,XslTransform,XslCompiledTransform)都是XSLT 1.0处理器,仅支持XPath 1.0和XSLT 1.0中定义的功能。

答案 1 :(得分:0)

XMLSpy正在为您提供该功能,它不是内置于XSLT中的。请参阅此帖子了解相同的问题(和实施):XSLT: can we use abs value?