Всем привет, возникла проблема чтения с помощью XmlReader, метод из DLL возвращает XML вот такого вида:
<result>
<command>OpenShift</command>
<parameters params="1">
<p1 type="string"><errorCode>115</errorCode><description>openShift возвратил 115. Команда не поддерживается в данном режиме
Открытая смена; 24 часа кончились</description></p1>
</parameters>
</result>
Во время парсинга XML когда парсер доходит до значения начинающегося с "<errorCode>115<" возникает исключение с вот таким сообщением:
"Ссылка на необъявленный объект подстановки "LT"., строка 1, позиция 79."
Всячески перепробовал XmlReader настроить типа:
public bool ParseCall(string in_xml, ref CALL call, ref string error_message)
{
XmlReaderSettings settings = new XmlReaderSettings();
settings.DtdProcessing = DtdProcessing.Ignore;
settings.ValidationType = ValidationType.None;
settings.ValidationFlags = System.Xml.Schema.XmlSchemaValidationFlags.None;
settings.CheckCharacters = false;
XmlReader xmlReader = XmlReader.Create(new StringReader(in_xml), settings);
...
Но это к сожалению не помогает. Этой же библиотекой пользуется и ПО написанное на C++ с использованием IXmlReader и там такого эффекта не возникает.
Подскажите пожалуйста кто знает/сталкивался с подобным и как такое решить?
Здравствуйте, Sinclair, Вы писали:
Спасибо тебе большое, ToLower строке для парсинга реально помогло, рукопашный DTD попробую реализовать все таки что бы прям все по правильному было.
_>>Во время парсинга XML когда парсер доходит до значения начинающегося с "<errorCode>115<" возникает исключение с вот таким сообщением:
_>>"Ссылка на необъявленный объект подстановки "LT"., строка 1, позиция 79."
S>Если я правильно понимаю, то проблема — в case-sensitivity. Попробуйте руками скормить ему тот же код, только с <errorCode>115 и так далее.
_>>Подскажите пожалуйста кто знает/сталкивался с подобным и как такое решить?
S>Если я угадал, то правильный способ — скормить ему рукопашный DTD. Простой способ — перед вызовом XmlReader перевести все entity в lowercase.