【发布时间】:2011-06-27 05:07:35
【问题描述】:
我有来自第三方的 XSLT 负载,我需要用它来转换一些数据。
如果我使用 xsltproc,它可以正常工作并按预期输出数据。
我有以下 C# 代码可以尝试在进程中使用它:
sXML 是 XML 的块 oJob.ContentTemplate 是 XSLT 文件的本地文件路径
try
{
using (StringWriter oOutputString = new StringWriter())
{
using (XmlTextWriter oOutputWriter = new XmlTextWriter(oOutputString))
{
using (StringReader oInputString = new StringReader(sXML))
{
using (XmlTextReader oInputReader = new XmlTextReader(oInputString))
{
XslCompiledTransform oXSLTTransform = new XslCompiledTransform();
oXSLTTransform.Load(oJob.ContentTemplate, XsltSettings.TrustedXslt, new XmlUrlResolver());
oXSLTTransform.Transform(oInputReader, oOutputWriter);
String sHTML = oOutputWriter.ToString();
}
}
}
}
}
catch (Exception e)
{}
抛出的异常是:
附加信息:找不到实现前缀“http://dlxs.org”的脚本或外部对象。
XSLT 相当复杂,目前我大部分都不懂。有没有一种方法可以让我在不深入研究 XSLT 的情况下完成这项工作?
Visual Studio 2010 应该支持 EXSLT 吧?
编辑:如果我启用调试并进入它,我可以看到错误:
<xsl:import href="../../lib/xslfunctions.xsl"/>
......
<xsl:when test="contains($BibRegions, dlxs:normAttr($searchRgn))">
这些函数应该已经包含了,本地 XSLT 文件之一包含以下内容:
<?xml version="1.0" encoding="UTF-8" ?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:str="http://exslt.org/strings" xmlns:exsl="http://exslt.org/common" xmlns:func="http://exslt.org/functions" xmlns:dlxs="http://dlxs.org" extension-element-prefixes="str exsl dlxs func" exclude-result-prefixes="str exsl dlxs func">
<!-- extension functions -->
<func:function name="dlxs:normAttr">
<xsl:param name="attr"/>
<!-- strip out spaces,commas,question marks -->
<xsl:variable name="temp" select="translate($attr,' ,?','')"/>
<func:result select="translate($temp,'ABCDEFGHIJKLMNOPQRSTUVWXYZ','abcdefghijklmnopqrstuvwxyz')"/>
</func:function>
.....
</xsl:stylesheet>
是 Visual Studio 无法打开这些文件是因为它们使用 UNIX 路径还是因为安全问题无法打开本地文件?
编辑 2:
我正在使用的扩展是:
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:str="http://exslt.org/strings"
xmlns:exsl="http://exslt.org/common"
xmlns:func="http://exslt.org/functions"
xmlns:dlxs="http://dlxs.org"
extension-element-prefixes="str exsl dlxs func"
exclude-result-prefixes="str exsl dlxs func">
我是 XSLT 初学者,所以不确定您需要什么。
【问题讨论】:
-
您似乎正在使用一些 XSLT 扩展。您需要正确指定在哪里可以找到它们。如何完成取决于您使用的扩展。能否请您发布更多详细信息?
标签: c# visual-studio-2010 xslt exslt