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 содержит <> или <>
:
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<BPN>
<Booo id="6001<" />
<PoooPoo id="2600" />
<UserName>tomas</UserName>
<VooId>MYID</VooId>
<Text><</Text>
</BPN>
это просто заканчивается TransmogrifierException: Nagasena.Sax.TransmogrifierException: конец документа не ожидается.
Я использую реализацию C#, поэтому я проверил проблему в реализации Java - там это работает хорошо. Поэтому я попытался изменить некоторые параметры, но ничего не помогло.
Когда я заменяю <Text><</Text>
с <Text><![CDATA[<]]></Text>
и из <Booo id="6001<" />
Я удалил <
- <Booo id="6001" />
Кодировка прошла успешно. Но в атрибуте нет возможности использовать cdata и когда он содержит <> или <>
это заканчивается ошибкой.
Я собираюсь отлаживать библиотеку nagasena, но если у кого-то есть полезные советы, я был бы благодарен.
Спасибо
1 ответ
Эта проблема возникла из-за использования анализатора AElfred XML в Nagasena. Последняя версия nagasena использует синтаксический анализатор Microsoft XML и больше не должна демонстрировать эту проблему.