Код: Выделить всё
var settings = new XmlWriterSettings()
{
OmitXmlDeclaration = true,
};
var stringWriter = new StringWriter();
stringWriter.NewLine = "\n";
using var writer = XmlWriter.Create(stringWriter, settings);
writer.WriteStartElement(null, "Nm", null);
writer.WriteString("te\nxt");
writer.WriteEndElement();
writer.Flush();
var test = stringWriter.ToString();
Console.WriteLine(test.Contains("te\r\nxt")); // Outputs true on my Windows machine
Это на самом деле XML c15n или что-то в этом роде?
Я запустил эту тестовую программу на .net 10, и она по-прежнему возвращает true, хотя на самом деле меня волнуют результаты в net471.
Справочная информация
Я работаю над системой, которая обрабатывает XML-документы ISO20022 полученные из сети SWIFT. SWIFT выполняет проверку схемы XML с помощью XSD, и документ XML должен быть действительным, чтобы достичь нашей инфраструктуры.
Мы обрабатываем эти документы (теоретически без преобразования) с помощью нескольких приложений SWIFT, подключенных через IBM MQ, а затем вставляем их в консольное приложение C#, работающее в Windows, которым владеет моя команда. Наше приложение читает данные из IBM MQ. В одном случае наше консольное приложение C# проверило документ, используя тот же XSD, который использует SWIFT, и объявило его недействительным. Мне нужно определить, где возникла проблема.
Представьте определение элемента XSD следующим образом:
Код: Выделить всё
Может быть, есть какая-то другая, более тонкая причина, по которой это происходит, но на данный момент это мое лучшее предположение. Просто пытаюсь сузить область возникновения проблемы, и теперь мне интересно, как здесь ведет себя XmlWriter.
Подробнее здесь: https://stackoverflow.com/questions/798 ... xt-element
Мобильная версия