Nagasena/OpenExi: кодирование xml с помощью & lt; в атрибуте

Я реализовал кодер Nagasena в C#:

 public byte[] encodeEXI(byte[] inBytes)
    {
        MemoryStream outStream = new MemoryStream();
        MemoryStream inStream = new MemoryStream(inBytes);
        try
        {
            Transmogrifier transmogrifier = new Transmogrifier();
            GrammarCache grammarCache = new GrammarCache((EXISchema)null, GrammarOptions.DEFAULT_OPTIONS);
            transmogrifier.setGrammarCache(grammarCache, (SchemaId)null);
            transmogrifier.OutputStream = outStream;
            transmogrifier.AlignmentType = AlignmentType.compress;
            transmogrifier.PreserveWhitespaces = false;
            transmogrifier.PreserveLexicalValues = false;
            transmogrifier.DeflateLevel = 1;
            transmogrifier.ResolveExternalGeneralEntities = false;


            Org.System.Xml.Sax.InputSource<Stream> iS = new Org.System.Xml.Sax.InputSource<Stream>(inStream);
            transmogrifier.encode(iS);

            outStream.Position = 0;
            last = outStream.ToArray();
            return outStream.ToArray();
        }
        catch (TransmogrifierException tex)
        {
            Console.WriteLine("Error in OpenExi_Library: " + tex);
            return null;
        }
        finally
        {
            outStream.Close();
            inStream.Close();
        }
    }

и у меня есть проблема с кодировкой простой и действительной ведьмы XML содержит <> или &lt;&gt;:

<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<BPN>
  <Booo id="6001&lt;" />
  <PoooPoo id="2600" />
  <UserName>tomas</UserName>
  <VooId>MYID</VooId>
  <Text>&lt;</Text>
</BPN>

это просто заканчивается TransmogrifierException: Nagasena.Sax.TransmogrifierException: конец документа не ожидается.

Я использую реализацию C#, поэтому я проверил проблему в реализации Java - там это работает хорошо. Поэтому я попытался изменить некоторые параметры, но ничего не помогло.

Когда я заменяю <Text>&lt;</Text> с <Text><![CDATA[<]]></Text> и из <Booo id="6001&lt;" /> Я удалил &lt; - <Booo id="6001" />Кодировка прошла успешно. Но в атрибуте нет возможности использовать cdata и когда он содержит <> или &lt;&gt; это заканчивается ошибкой.

Я собираюсь отлаживать библиотеку nagasena, но если у кого-то есть полезные советы, я был бы благодарен.

Спасибо

1 ответ

Эта проблема возникла из-за использования анализатора AElfred XML в Nagasena. Последняя версия nagasena использует синтаксический анализатор Microsoft XML и больше не должна демонстрировать эту проблему.

Другие вопросы по тегам