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), '#')"/>
....

これはAltovaXMLSpyのようなツールで完全に機能しますが、.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の一部であり、Saxon、AltovaXML、XMLPrimeなどのXSLT2.0プロセッサーでサポートされています。MicrosoftのXSLTプロセッサ(MSXML 3、4、5、6、XslTransform、XslCompiledTransform)は、すべてXPath1.0およびXSLT1.0で定義された関数のみをサポートするXSLT1.0プロセッサです。

于 2012-05-23T16:56:34.393 に答える
-1

XMLSpyは関数を提供しており、XSLTには組み込まれていません。同じ質問(および実装)については、この投稿を参照してください:XSLT:絶対値を使用できますか?

于 2012-05-23T16:37:54.253 に答える