读取树结构需要进程启动(例如,XML的
,或者JSON的{/[
)。
让根包装器和一大串汽车(为了简洁起见,我使用lombok注释):
@Getter
@Setter
@JacksonXmlRootElement
@NoArgsConstructor
@AllArgsConstructor
static class CarBook {
@JacksonXmlProperty(isAttribute = true)
private int version;
@JacksonXmlElementWrapper(localName = "cars")
@JacksonXmlProperty(localName = "car")
private List<Car> cars;
}
@Getter
@Setter
@ToString
@NoArgsConstructor
@AllArgsConstructor
static class Car {
private String model;
private String plate;
}
然后,在完全读取所有列表(可能是其他成员)之前,无法获得carbook
对象。
/**
* Method for reading a single XML value from given XML-specific input
* source; useful for incremental data-binding, combining traversal using
* basic Stax {@link XMLStreamReader} with data-binding by Jackson.
*
* @since 2.4
*/
public <T> T readValue(XMLStreamReader r, Class<T> valueType) throws IOException {
return readValue(r, _typeFactory.constructType(valueType));
}
例如,让大的(1,2g)文件:
<CarBook version="1"><cars>
<car><model>Alfa Romeo Spider</model><plate>27437</plate></car>
<car><model>Almera</model><plate>6429</plate></car>
<car><model>Audi 80 and 90</model><plate>4898</plate></car>
<car><model>Audi A3</model><plate>21259</plate></car>
<car><model>Audi A4</model><plate>21056</plate></car>
<car><model>Audi Coupé</model><plate>5623</plate></car>
<car><model>Austin Metro</model><plate>26446</plate></car>
<car><model>BMW 3 Series</model><plate>16338</plate></car>
<car><model>BMW 5 Series</model><plate>29859</plate></car>
...
的,你可以懒洋洋地阅读
public static void main(String... args) throws IOException, XMLStreamException {
XmlMapper xm = new XmlMapper();
XMLInputFactory xif = XMLInputFactory.newInstance();
XMLStreamReader xr = xif.createXMLStreamReader(new FileInputStream(/* 1,2G file */ "/home/josejuan/tmp/all.cars.xml"));
// you must to read step by step
while (xr.hasNext()) {
xr.next();
if (xr.getEventType() == START_ELEMENT) {
System.out.println(xr.getLocalName());
if ("car".equals(xr.getLocalName())) {
Car car = xm.readValue(xr, Car.class);
System.out.println(car);
if ("21056".equals(car.getPlate()))
break;
}
}
}
System.out.println("== End Of Process ==");
}
有输出
CarBook
cars
car
WithLazyJackson.Car(model=Alfa Romeo Spider, plate=27437)
car
WithLazyJackson.Car(model=Almera, plate=6429)
car
WithLazyJackson.Car(model=Audi 80 and 90, plate=4898)
car
WithLazyJackson.Car(model=Audi A3, plate=21259)
car
WithLazyJackson.Car(model=Audi A4, plate=21056)
== End Of Process ==
我有一个XML文件,其中包含大量员工记录(比如高达1M),如下所示: 我使用JAXB将员工记录映射到以下Java对象: XML的内容不能被更改,并且给定这个XML,我如何使用JAXB将每个员工XML记录解封给员工对象,以便我可以逐个处理它?
谁能帮我找出我在这里做错了什么。我必须解析下面的XML字符串 为此,我有三个bean要映射,如下所示 我试图像下面这样解析 我使用的是jackson-dataformat-xml版本2.9.8。
我在通过邮递员传递json数据时遇到问题。如果Mandetory日期带有注释,没问题。另一个日期接受null。但是在更新时,该日期会产生问题。我使用Java1.8与Spring启动 以下链接我已经访问过,但不适合这个。杰克逊JSON解析错误的LocalDateTime解析:无法构造java.time.LocalDate的实例:没有String参数构造函数/工厂方法从String值反序列化https
问题内容: 我如何在Java或C中使用vtd-xml解析如下的xml文件? 任何帮助,将不胜感激。 谢谢 问题答案: 我想其中有些取决于您要如何解析文件。 这是一个“非生产”示例,其中使用了一些有用的技术,包括: XPath选择(此处仅使用“ / *”) 浏览所有同级节点 通过子节点向下看 使用AutoPilot将节点属性提取到地图中 希望能帮助到你 产生以下输出: 添加带有AutoPilot循环
如何在java或C中使用vtd xml解析如下xml文件? 任何帮助都将不胜感激。 谢谢
我有这个文件要处理,我正试图找出如何将第二行作为不同的对象来读取。在这一行的末尾,最后一项是公交车的数量。第二行、第四行等应包含idBus和noOfBus,并用逗号分隔。 基于这些课程 我想要一个函数来处理CSV文件中所有公交车和大学线路的列表。它必须使用流API。我不知道这是否可能或如何进行。 当然,可以根据类进行更改,但保留变量,不添加任何额外内容。 我认为最方便的方法是浏览文件,根据两个班级