0

我有 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 上?

有人有什么想法吗?

4

2 回答 2

5

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

于 2012-05-23T16:56:34.393 回答
-1

XMLSpy 为您提供了该功能,它不是内置在 XSLT 中的。有关相同的问题(和实现),请参阅此帖子:XSLT:我们可以使用 abs 值吗?

于 2012-05-23T16:37:54.253 回答