2014-10-15 1 views
0

Я реализовал Нагасеной кодер в C#:Нагасена/OpenExi: кодирование XML с < в атрибуте

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;, он заканчивается ошибкой.

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

ТНХ

+0

после отладки некоторых код нагасы ... я получил внутреннее SaxException: {"ссылка на внешний объявленный объект \" lt \ ", когда документ объявлен автономным"}, поэтому я изменил свойство автономно на no, и он работает, но я не понимаю, почему ... –

ответ

0

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

 Смежные вопросы

  • Нет связанных вопросов^_^