2

我正在创建一个使用 XSLT 来转换传入 XML 消息的应用程序。我有多个 XSLT,其中一些包括其他 XSLT。

例如,B.XSLT 包括 A.XSLT,其中包含一些常用功能。

我已将所有 XSLT 标记为嵌入式资源,因此它将嵌入到可执行文件中。现在,当我使用以下代码加载 XSLT 时,

using (Stream objXSLTStream = Assembly.GetAssembly(this.GetType()).GetManifestResourceStream("MyNamespace.XSLContainer.Transaction.B.xslt"))
{
    using (XmlReader objXSLTReader = XmlReader.Create(objXSLTStream))
    {
        XslCompiledTransform objXSL = new XslCompiledTransform(true);
        objXSL.Load(objXSLTReader);
        XmlReader objXMLReader = XmlReader.Create(new StringReader(InputXML));
        StringBuilder sbOutputXML = new StringBuilder();
        XmlDocument docOutputXML = new XmlDocument();
        XmlWriter objXMLWriter = XmlWriter.Create(new StringWriter(sbOutputXML));
        objXSL.Transform(objXMLReader, ArgsList, objXMLWriter);
        docOutputXML.LoadXml(sbOutputXML.ToString());

        return docOutputXML;
     }
}

它给了我错误

找不到路径“..\Bin_Folder_Location\General\A.xslt”的一部分。

在我的 XSLT B 中,我使用此语句包含 A.xslt

<xsl:include href ="../General/A.xslt"/>

任何人都可以建议我将嵌入式 xslt 包含到 C# 中的另一个 xslt 中的正确解决方法吗?

4

1 回答 1

1

您需要在 xsl:include 中使用绝对路径或使用自定义 XmlUrlResolver,如下所示:

class MyXmlUrlResolver : XmlUrlResolver
    {
        public override Uri ResolveUri(Uri baseUri, string relativeUri)
        {
            if (baseUri != null)
                return base.ResolveUri(baseUri, relativeUri);
            else
                return base.ResolveUri(new Uri("http://mypath/"), relativeUri);
        }
    }

并在 XslCompiledTransform 的加载函数中使用它,

resolver=new MyXmlUrlResolver();
xslt.Load(xR,null,resolver);

如何解决从字符串加载 XSL 的转换中包含的 XSL?

于 2013-02-22T07:45:35.633 回答