c# xslt BizTalk错误对象引用未设置为实例
本文关键字:设置 实例 对象引用 xslt BizTalk 错误 | 更新日期: 2023-09-27 17:48:57
我正在使用以下代码转换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);
}
当你回到BizTalk你引用一个空对象和崩溃(xmlDoc.OuterXml
), xmlDoc是空的,基本上做一个null.OuterXml
:
mlDoc = gh.BizTalk.Components
.XmlUtility.ApplyTransform(PItransformedDoc, PIToIMTransform);
if (logger.IsDebugEnabled){
logger.DebugFormat(logProps, "PI Message AFTER removed errorCodes transform: {0}"
, xmlDoc.OuterXml);
}
建议保护xmlDoc调用,并在异常处理块中打印出正在抛出的异常。关键区出了问题可能是解析错误,也可能是xsl加载错误try this:
catch (Exception e)
{
logger.Error(e);
return ;
}
然后告诉我们正在抛出的异常