Проверьте xml на Mono - PullRequest
3 голосов
/ 09 июня 2010

У меня есть приложение .net, которое я хочу перенести на Mono. Приложение берет xml-файл, проверяет его и «выполняет» xml.

Часть проверки не работает на Mono. XML проверяет XSD.

XmlReaderSettings settings = new XmlReaderSettings();
settings.ValidationEventHandler += new System.Xml.Schema.ValidationEventHandler(XmlValidationEventHandler);

settings.ValidationType = ValidationType.Schema;
settings.ValidationFlags |= XmlSchemaValidationFlags.ReportValidationWarnings;
settings.Schemas.Add("http://eltrade.com/" + m_Schema, XmlReader.Create(stream));
stream.Close();

Console.WriteLine("Create xmlValidationReader");

// Validate the XML with XS
using (XmlReader xmlValidationReader = XmlReader.Create(m_document, settings))
{
    try
    {
        Console.WriteLine("Begin xml validation");

        while (xmlValidationReader.Read())
        {
            Console.WriteLine(xmlValidationReader.ReadInnerXml());
            Console.WriteLine("---");
        }
    }
    catch (XmlSchemaException SE)
    {
        m_success = false;
        Console.WriteLine("XmlSchemaException: " + SE.Message + " " + SE.SourceSchemaObject.SourceUri);
    }
    catch (XmlException XE)
    {
        m_success = false;
        Console.WriteLine("XMLException: " + XE.Message + " " + XE.SourceUri);
    }
    catch (Exception E)
    {
        m_success = false;
        Console.WriteLine("Exception: " + E.Message);
    }
}  

Когда я запускаю проверку (вышеуказанная функция), читается только первая строка xml и выдается исключение: Невозможно привести исходный тип к целевому типу. Невозможно привести объект типа «System.UInt32» к типу «System.Int64».

<bons xmlns="http://eltrade.com/schema-file-driver.xsd">
  <receipt id="10">
    <type>
      <nonfiscal/>
    </type>
    <prints>
      <line>
        <text>Free text at the top of receipt.</text>
        <wordwrap>true</wordwrap>
      </line>
      <payments>
        <pay1>all</pay1>
      </payments>
    </prints>
  </receipt>
</bons>

На Windows с .Net Framework все работает нормально.
В Mono (в Linux и Windows) проверка вызывает вышеприведенное исключение.

Использование Mono v.2.4.2.3 на компьютере Linux (kubuntu) и
Mono v.2.6.4 на компьютере с Windows.

Что может быть причиной исключения?

<bons xmlns="http://eltrade.com/schema-file-driver.xsd">

не содержит числовых значений для приведения его к Int64.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...