gpt4 book ai didi

c# - 将嵌入式 XSLT 包含到另一个嵌入式 XSLT 中

转载 作者:太空宇宙 更新时间:2023-11-03 13:46:54 25 4
gpt4 key购买 nike

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

例如B.XSLT包括A.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;
}
}

它给我错误

Could not find a part of the path '..\Bin_Folder_Location\General\A.xslt'.

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

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

谁能建议我将嵌入式 xslt 包含到 C# 中的另一个 xslt 中的正确解决方法?

最佳答案

您需要在 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);

How to resolve XSL includes in a Transformation that loads XSL from a String?

关于c# - 将嵌入式 XSLT 包含到另一个嵌入式 XSLT 中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15018919/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com