Я пытаюсь преобразовать XML, используя XsltCompiledTransform
. На моем локальном ПК все работает нормально. Но в Docker-контейнере иногда XsltCompiledTransform.Transform()
выдает.
Полная ошибка
System.ArgumentException: '.', hexadecimal value 0x00, is an invalid character.
at System.Xml.XmlEncodedRawTextWriter.WriteElementTextBlock(Char* pSrc, Char* pSrcEnd)
at System.Xml.XmlEncodedRawTextWriter.WriteString(String text)
at System.Xml.XmlWellFormedWriter.WriteString(String text)
at System.Xml.Xsl.Runtime.XmlRawWriterWrapper.WriteString(String text)
at System.Xml.Xsl.Runtime.XmlQueryOutput.StartCopy(XPathNavigator navigator, Boolean callChk)
at System.Xml.Xsl.Runtime.XmlQueryOutput.CopyNode(XPathNavigator navigator)
at System.Xml.Xsl.Runtime.XmlQueryOutput.WriteItem(XPathItem item)
at <xsl:template name="compiler:generated"> (2)(XmlQueryRuntime , XPathNavigator , String , String , String , IList`1 , String )
at <xsl:template name="compiler:generated">(XmlQueryRuntime , XPathNavigator )
at <xsl:template match="/">(XmlQueryRuntime , XPathNavigator )
at Root(XmlQueryRuntime )
at System.Xml.Xsl.XmlILCommand.Execute(Object defaultDocument, XmlResolver dataSources, XsltArgumentList argumentList, XmlSequenceWriter results)
at System.Xml.Xsl.XmlILCommand.Execute(Object defaultDocument, XmlResolver dataSources, XsltArgumentList argumentList, XmlWriter writer)
at System.Xml.Xsl.XslCompiledTransform.Transform(XmlReader input, XmlWriter results)
at XsltTranslator.Translate(Byte[] report)
Файл XSLT действителен. И XML действителен. Я уверен, потому что этот код иногда работает в Docker, и всегда отлично работает на ОС Windows или Linux с теми же файлами.
Я пытался отключить проверку символов в настройках, но в любом случае не работает.
Если я запускаю код на локальном ПК в ОС Windows или Linux, все работает нормально. Также на .Net Framework все работает.
Мой код:
public byte[] Translate(byte[] report)
{
byte[] result;
var encoding = Encoding.GetEncoding(1251);
var xsltTransform = new XslCompiledTransform();
var version = GetVersion(report, encoding);
using (var xmlReader = XmlReader.Create(new StringReader(encoding.GetString(report))))
using (var writerStream = new MemoryStream())
using (var writer = XmlWriter.Create(writerStream, new XmlWriterSettings { Encoding = encoding }))
{
xsltTransform.Load(Path.Combine(shemesPath, $"{version}.xslt"));
xsltTransform.Transform(xmlReader, writer);
result = writerStream.ToArray();
}
return result;
}
Docker - 18.09.9
Net Core - 2.2
Контейнер Docker - Linux
Кто-нибудь знает, как решить эту проблему?