Nagasena / OpenExi:使用<编码xml在属性中

时间:2014-10-15 10:27:13

标签: java c# xml exi openexi

我在C#中实现了Nagasena编码器:

 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;或&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;时或&lt;&gt;最终会出错。

我要调试nagasena库,但如果有人有一些有用的建议,我会很感激。

THX

1 个答案:

答案 0 :(得分:0)

这个问题是由于在Nagasena中使用了AElfred XML解析器。 最新的nagasena使用Microsoft XML解析器,而不应再出现这个问题。