相关疑难解决方法(0)

解析没有根元素的XML流

我需要解析连续的格式良好的XML元素流,我只给它一个已构造的java.io.Reader对象.这些元素不包含在根元素中,也不是像XML标题一样<?xml version="1.0"?>",而是有效的XML.

使用Java org.xml.sax.XMLReader类不起作用,因为XML Reader期望从封闭的根元素开始解析格式良好的XML.因此,它只读取流中的第一个元素,它将其视为根,并在下一个元素中失败,典型的

org.xml.sax.SAXParseException:根元素后面的文档中的标记必须格式正确.

对于不包含根元素的文件,但是这样的元素确实存在或者可以定义(并且被称为MyRootElement),可以执行以下操作:

        Strint path = <the full path to the file>;

        XMLReader xmlReader = SAXParserFactory.newInstance().newSAXParser().getXMLReader();

        StringBuilder buffer = new StringBuilder();

        buffer.append("<?xml version=\"1.0\"?>\n");
        buffer.append("<!DOCTYPE MyRootElement ");
        buffer.append("[<!ENTITY data SYSTEM \"file:///");
        buffer.append(path);
        buffer.append("\">]>\n");
        buffer.append("<MyRootElement xmlns:...>\n");
        buffer.append("&data;\n");
        buffer.append("</MyRootElement>\n");

        InputSource source = new InputSource(new StringReader(buffer.toString()));

        xmlReader.parse(source);
Run Code Online (Sandbox Code Playgroud)

我已经通过将部分java.io.Reader输出保存到文件来测试上述内容并且它可以工作.但是,这种方法在我的情况下不适用,并且无法插入此类额外信息(XML标头,根元素),因为java.io.Reader已经构造了传递给我的代码的对象.

基本上,我正在寻找"碎片式XML解析".所以,我的问题是,可以使用标准Java API(包括org.sax.xml.*java.xml.*包)来完成吗?

java xml sax xmlreader

17
推荐指数
3
解决办法
9495
查看次数

使用xstream反序列化json数组

stackoverflow上有很多关于如何使用Gson反序列化json数组的信息.

但是我如何使用XStreamjettison 做同样的事情呢?

这是json:

{"entity":[{"id":"1", "name":"aaa"}, {"id":"2", "name":"bbb"}]}
Run Code Online (Sandbox Code Playgroud)

以下是XStream我尝试解析它的代码:

XStream xstream = new XStream(new JettisonMappedXmlDriver());
xstream.alias("entity", Entity[].class);
return (Entity[])xstream.fromXML(jsonString);
Run Code Online (Sandbox Code Playgroud)

我有以下例外:

com.thoughtworks.xstream.converters.ConversionException: id : id
Run Code Online (Sandbox Code Playgroud)

java json xstream deserialization

10
推荐指数
1
解决办法
1951
查看次数

标签 统计

java ×2

deserialization ×1

json ×1

sax ×1

xml ×1

xmlreader ×1

xstream ×1