【发布时间】:2011-04-05 14:32:50
【问题描述】:
我正在使用以下代码转换 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 服务器上的事件日志吗?
-
那段代码曾经在 biztalk 中成功运行过吗?
-
@Nix。我检查了事件日志,没有错误或警告。
-
在 Biztalk Server 上会有崩溃的日志,你检查了系统和应用程序日志?
-
@Nix。是的,它使用第一个 XSLT 生成转换后的 xml,但使用相同的代码在第二个 XSLT 上抛出异常。
标签: c# exception biztalk transform xslt