以下で始まる XSL ファイルを用意します。
<xsl:stylesheet version="2.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:XQHeaderFunc="java:com.sonicsw.xq.service.xform.HeaderExtension"
xmlns:saxon="http://saxon.sf.net/"
exclude-result-prefixes="XQHeaderFunc saxon">
<saxon:script language="java" implements-prefix="XQHeaderFunc" src="java:com.sonicsw.xq.service.xform.HeaderExtension" />
そして、ファイルの後半:
<xsl:variable name="processId" select="XQHeaderFunc:getProperty(XQHeaderFunc:new(),'processId',-1)" />
変換を実行しようとすると、次のエラーが発生します。
名前空間「java:com.sonicsw.xq.service.xform.HeaderExtension」に関連付けられたスクリプトまたは拡張オブジェクトが見つかりません。
これは、私が気にしない SonicMQ 固有のものです。どういうわけかそれを無視できる方法はありますか?
私は現在、次のような変換を行っています。
var readerSettings = new XmlReaderSettings
{
ConformanceLevel = ConformanceLevel.Document,
IgnoreWhitespace = true,
IgnoreComments = true,
IgnoreProcessingInstructions = true,
CheckCharacters = true,
};
var writerSettings = new XmlWriterSettings
{
Encoding = Encoding.UTF8,
ConformanceLevel = ConformanceLevel.Document,
NewLineHandling = NewLineHandling.Replace,
OmitXmlDeclaration = false,
NewLineChars = "\r\n",
Indent = true,
IndentChars = " ",
CloseOutput = false,
};
var xsl = new XslCompiledTransform(System.Diagnostics.Debugger.IsAttached);
using (var stylesheet = XmlReader.Create(xslFile, readerSettings))
xsl.Load(stylesheet);
using (var result = new MemoryStream())
{
using (var xml = XmlReader.Create(xmlFile, readerSettings))
using (var xmlWriter = XmlWriter.Create(result, writerSettings))
{
xsl.Transform(xml, xmlWriter);
}
// Deal with result
}