我使用JAXB使用XMLStreamReader从非常大的XML文件散集对象。
如果我要解组的XML元素是分开的(用换行符,甚至是一个空格),这就可以了。
如果要解组的XML元素之间没有空格,那么我会丢失所有其他项—XML读取器似乎会在解组的元素之后吞下该元素。
演示这一点的简化可运行示例的源代码https://gist.github.com/dalelane/88df784c3cb74b214d5c
有趣的是:
XMLStreamReader reader = XMLInputFactory.newInstance().createXMLStreamReader(inputStream);
JAXBContext context = JAXBContext.newInstance(MyJAXBClass.class);
Unmarshaller unmarshaller = context.createUnmarshaller();
boolean running = true;
while (running){
switch (reader.next()){
case XMLStreamConstants.START_ELEMENT:
if (reader.getLocalName().equals("myunmarshallobjname")){
JAXBElement<MyJAXBClass> unmarshalledObj = unmarshaller.unmarshal(reader, MyJAXBClass.class);
MyJAXBClass item = unmarshalledObj.getValue();
}
break;
case XMLStreamConstants.END_DOCUMENT:
reader.close();
running = false;
break;
}
}
每次流读取器点击元素的开头,我都会将其传递给解组器,以解组该片段。
如果我有XML,它可以工作:
<myunmarshallobjname key="one"></myunmarshallobjname> <myunmarshallobjname key="two"></myunmarshallobjname>
但如果我有以下物品,则会丢失物品:
<myunmarshallobjname key="one"></myunmarshallobjname><myunmarshallobjname key="two"></myunmarshallobjname>
我做错了什么?我如何让读者不跳过元素?
在解组调用后,仔细检查启用的元素事件。如果XMLStreamReader
处于endElement
状态,则需要调用next()
作为循环的一部分,但它处于startElement
状态,则不需要调用。
问题内容: 我有一个使用Jersey实现的JAX-RS REST服务。JAX-RS / Jersey的很酷的功能之一是,只需添加一些Java批注,就可以将POJO轻松转换为REST服务…包括使用JAXB批注将POJO转换为JSON的简单方法。 现在,我希望能够将这个酷炫的JSON修饰功能用于非REST用途-我很希望能够将其中一些对象序列化为JSON文本到磁盘。这是我要序列化的示例JAXB对象: J
问题内容: 只是对jaxb的工作方式感到好奇,我有一个注释如下的类: 字段str的访问修饰符受到保护,为什么Jaxb仍然可以编组和解组它? 问题答案: 它使用反射。甲或字段或方法可以使用反射API(使用访问在相应的或对象)。 请记住- ,并且是 默认可见性的 控件,仅此而已。它们不(也不能)使用反射阻止访问。
问题内容: 我正在使用JAXB marshaller创建和格式化我的.xml文件。除了一个地方,它运作良好。缩进缺少两个地方: .xml文件的其余部分看起来不错。我正在使用这种方法来美化整个代码: 不幸的是,它不适用于这两个元素。有任何想法吗? 问题答案: 可以通过将javax Transformer应用于输出来解决此烦人的问题。
除了擅长编写 md 电子书来攒 Star,我还写了一系列的开源软件,也掌握了一些项目运营的技巧。 开源并不是你把软件、README 写好就行了,还有详细的文档、示例程序等等。 开源也不是你的项目好了,就会有一堆人参与进来。 开源还要你帮助别人解决 Bug,……。 人们做事都是有原因的,即动机。再举例一下,如果你的项目不够火,别人都没听过,那么写到简历上可能没啥用。 Marketing First
问题内容: 我正在使用Java 6,JaxB 2和SpringSource Tool Suite(与Eclipse相同)。我编写了一些Java类,使用JaxB从中生成XML模式。但是,我注意到为了使用JaxB从Java对象生成XML文档的功能,我需要一个ObjectFactory。 如何生成ObjectFactory而不会浪费我现在已有的类? 问题答案: 更新 这个问题可能指的是创建一个角色的作用