2013-02-22 9 views
2

Я создаю приложение, которое использует XSLT для преобразования входящих XML-сообщений. У меня есть несколько XSLT, некоторые из которых включают в себя другой XSLT.Включите встроенный 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 XSLT в C#?

ответ

1

Вам нужно либо использовать абсолютный путь в вашем XSL: включить или использовать пользовательские 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?

Смежные вопросы