java Nagasena/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时遇到了问题<&燃气轮机;或<>
:
<?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。萨克斯。TransmogrifierException:不应出现文档结尾
我使用的是c#实现,所以我在java实现中测试了这个问题——在那里它工作得很好。 所以我试着改变一些选择,但没有任何帮助
当我用<Text><![CDATA[<]]></Text>
替换<Text><</Text>
并从<Booo id="6001<" />
删除<
-<Booo id="6001" />
时,编码成功。但在属性中,当cdata包含<&燃气轮机;或者<>
它以错误结束
我将调试nagasena库,但如果有人有一些有用的建议,我将不胜感激
thx
# 1 楼答案
这个问题是由于在Nagasena中使用AElfred XML解析器造成的。 最新的nagasena使用MicrosoftXML解析器,不应该再出现这个问题