首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使XslCompiledTransform忽略脚本

使XslCompiledTransform忽略脚本
EN

Stack Overflow用户
提问于 2012-09-17 15:04:35
回答 1查看 648关注 0票数 1

有一个包含以下开头的XSL文件:

代码语言:javascript
复制
<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" />

后来在档案里:

代码语言:javascript
复制
<xsl:variable name="processId" select="XQHeaderFunc:getProperty(XQHeaderFunc:new(),'processId',-1)" />

现在,当我试图进行转换时,我会得到以下错误:

找不到与命名空间'java:com.sonicsw.xq.service.xform.HeaderExtension'.相关联的脚本或扩展对象

这是一些我不关心的SonicMQ特定的东西。有什么办法可以让我忽略它吗?

我目前正在做这样的转换:

代码语言:javascript
复制
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
}
EN

回答 1

Stack Overflow用户

发布于 2013-01-03 16:44:08

XSLT文件是动态提供的还是可以手动修改的单个文件?

如果是后者,则可以使用它来防止自定义函数导致错误:

代码语言:javascript
复制
<xsl:variable name="processId">
  <xsl:if test="function-available('XQHeaderFunc:getProperty') and function-available('XQHeaderFunc:new)">
    <xsl:value-of select="XQHeaderFunc:getProperty(XQHeaderFunc:new(),'processId',-1)" />
  </xsl:if>
</xsl:variable>

如果函数不可用,这将导致processId为空。要替换默认值,可以这样做

代码语言:javascript
复制
<xsl:variable name="processId">
  <xsl:choose>
    <xsl:when test="function-available('XQHeaderFunc:getProperty') and function-available('XQHeaderFunc:new)">
      <xsl:value-of select="XQHeaderFunc:getProperty(XQHeaderFunc:new(),'processId',-1)" />
    </xsl:when>
    <xsl:otherwise>
      Default Value
    </xsl:otherwise>
  </xsl:choose>
</xsl:variable>
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12462090

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档