Я преобразую XML, используя следующий код.
Он отлично работает для одного xslt, но выдает исключение: ссылка на объект не установлена для экземпляра объекта.
Я проверил оба xslt, они работают нормально по отдельности (что означает создание ожидаемого XML после преобразования).
Может кто-нибудь подсказать мне, что тут не так. Я попытался выполнить некоторую отладку, но не могу получить подробности об ошибке или трассировку стека, поскольку это приложение BizTalk, которое развернуто на сервере .... Заранее спасибо
Вот код.
public static XmlDocument ApplyTransform(
XmlDocument toTransform,
XmlDocument StyleSheet)
{
XslCompiledTransform xslt = new XslCompiledTransform();
XmlDocument transformedDoc = new XmlDocument();
Stream stream = new MemoryStream();
StreamWriter sw = new StreamWriter(stream);
log4net.Ext.Serializable.SLog logger;
logger = log4net.Ext.Serializable.SLogManager.GetLogger(@"BizTalk", typeof(RuntimeFileReader));
logger.RegistryConfigurator();
string logMsg = string.Format("StyleSheet used: {0}", StyleSheet);
logger.Debug(logMsg);
try
{
xslt.Load(StyleSheet);
xslt.Transform(toTransform, null, sw);
stream.Seek(0, SeekOrigin.Begin);
transformedDoc.Load(stream);
}
catch
{
return null;
}
finally
{
if (sw != null)
{
sw.Flush();
sw.Close();
}
}
string gMsg = string.Format("xml after Transformation : {0}", transformedDoc.OuterXml);
logger.Debug(gMsg);
return transformedDoc;
}
А вот XSLT, который выдает исключение.
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" omit-xml-declaration="yes"/>
<xsl:strip-space elements="Item"/>
<xsl:template match="node()|@*" xml:space="default">
<xsl:copy>
<xsl:apply-templates select="node()|@*"/>
</xsl:copy>
</xsl:template>
<xsl:template match="errorCodes"/>
</xsl:stylesheet>
Код Biztalk:
PIToIMTransform = new System.Xml.XmlDocument();
PIToIMTransform.Load(
gh.BizTalk.Components.RuntimeFileReader
.GetResourceFilePath("PInode.xslt"));
if (logger.IsDebugEnabled) {
xmlDoc = PIToIMTransform;
logger.DebugFormat(logProps, "XSLT being used for transform: {0}", xmlDoc.OuterXml);
}
xmlDoc = gh.BizTalk.Components
.XmlUtility.ApplyTransform(PItransformedDoc, PIToIMTransform);
if (logger.IsDebugEnabled){
logger.DebugFormat(logProps, "PI Message AFTER removed errorCodes transform: {0}"
, xmlDoc.OuterXml);
}