gpt4 book ai didi

java - 使用 Jackson 进行 XML 反序列化

转载 作者:行者123 更新时间:2023-11-30 06:19:38 27 4
gpt4 key购买 nike

<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta name="X-TIKA:embedded_resource_path" content="/1.jpg" />
<meta name="Last-Save-Date" content="2018-01-18T13:55:54Z" />
<meta name="Content-Type" content="image/jpeg" />
<title></title>
</head>
<body>
<div class="ocr">

some text content, test test, blah blah blah

</div>

<html>

<meta name="date" content="2018-01-18T13:55:54Z" />

<meta name="X-TIKA:embedded_resource_path" content="/1.jpg" />
<meta name="tiff:ImageWidth" content="2048" />
<meta name="Y Resolution" content="1 dot" />
<title></title>

<body />
</html>
</body>
</html>

我有这个类用于序列化上面显示的格式错误的 xml 的许多示例之一

@JsonIgnoreProperties(ignoreUnknown = true)
public class Body {

@JacksonXmlElementWrapper(localName = "p", useWrapping = false)
private List<String> p;
@JacksonXmlElementWrapper(localName = "div", useWrapping = false)
private List<DivContainer> div;

public List<DivContainer> getDiv() {
return div;
}

public void setP(List<String> p) {
this.p = p;
}

public List<String> getP() {
return p;
}

public String getConcatenatedContent() {
StringBuilder concatenatedContent = new StringBuilder();
if (p == null) {
return null;
}

getP().stream().filter(Objects::nonNull).forEach(concatenatedContent::append);
return concatenatedContent.toString();
}

@JsonIgnoreProperties(ignoreUnknown = true)
public class DivContainer {

@JacksonXmlProperty(localName = "id", isAttribute = true)
private String id;

@JacksonXmlProperty(localName = "class", isAttribute = true)
private String clas;

public String getClas() {
return clas;
}

public String getId() {
return id;
}

}

当我尝试反序列化此 xml 时,出现此异常:

Tika Parsing Exception for [zipArchive1.zip] - [com.fasterxml.jackson.databind.JsonMappingException: Invalid index 0; current element has only 0 attributes (through reference chain: com.blahblah.contentextraction.dao.ResolveResponseFromEmbeddedParser["body"])

我想从 div class="ocr"获取内容,这是一个通用类,它从 tika 解析器的不同输出中提取数据,但不是这个输出。 请帮忙 !!!!

最佳答案

进行 2 项修改以能够解析此 XML 文档:

  1. 需要一个包装类来反序列化 <html></html>元素例如:

    class XHTML {
    private Body body;

    public Body getBody() {
    return body;
    }
    }
  2. DivContainer需要一个额外的字段来获取每个 <div></div> 的文本内容

    class DivContainer {
    // other fields and getters

    @JacksonXmlText
    private String content;
    }

所以在这种情况下DivContainer::getClas将返回“ocr”DivContainer::getContent将返回“一些内容...”

一个额外的建议是定义 jackson 映射器中每个类重复的任何属性,例如

而不是把每个类都放在上面:

@JsonIgnoreProperties(ignoreUnknown = true)

在解析之前你可以做一次:

mapper.disable(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES);

关于java - 使用 Jackson 进行 XML 反序列化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48449869/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com