Java 使用Jackson XmlMapper和readTree()将XML文件解析为JsonNode将忽略XML元素同级
我有一个简单的XML文件,其结构如下Java 使用Jackson XmlMapper和readTree()将XML文件解析为JsonNode将忽略XML元素同级,java,xml,jackson,Java,Xml,Jackson,我有一个简单的XML文件,其结构如下 <?xml version = "1.0" encoding = "UTF-8"?> <EXPORT id="0" > <PUB id="1"> <PGR id="2" name="siblingparent" > <PGR id="3" name="sibling1"/> <PGR id="4" name="siblin
<?xml version = "1.0" encoding = "UTF-8"?>
<EXPORT id="0" >
<PUB id="1">
<PGR id="2" name="siblingparent" >
<PGR id="3" name="sibling1"/>
<PGR id="4" name="sibling2"/>
</PGR>
</PUB>
</EXPORT>
测试失败,因为只找到了1
PGR
元素
这是解析器的逻辑。getNodeFromXML:
public JsonNode getNodeFromXML(File xmlFile) throws IOException {
XmlMapper xmlMapper = new XmlMapper();
return xmlMapper.readTree(xmlFile);
}
这就是测试中JsonNode
对象/变量node
的返回方式:
{
"id": "0",
"PUB": {
"id": "1",
"PGR": {
"id": "2",
"name": "siblingparent",
"PGR": {
"id": "4",
"name": "sibling2"
}
}
}
}
正如您所看到的,
XmlMapper
只解析了sibling2
to。我已经在寻找允许兄弟姐妹的旗帜了。还没有找到解决办法。我可能会误解这里的树是什么吗?它是否故意忽略同级键?不完全确定,但它可能与重复的同级键有关。理论上,JSON允许这样做,但假设许多序列化框架都会禁止这样做是有道理的。请参阅以获取参考。@Mena从最后一个链接中删除点JsonNode
无法处理许多同名属性。您需要引入手动反序列化或提供适合您的XML
负载的POJO
类。看看类似的问题:,好的,我明白了。我试图重新启用副本,但无法使用XmlMapper#enable
方法。它有很多功能,包括在出现重复密钥时引发异常,但不幸的是无法禁用它:(不完全确定,但可能与重复的同级别键有关。理论上JSON允许这样做,但假设许多序列化框架会禁止这样做是有意义的。请参阅以获取参考。@Mena从最后一个链接删除点JsonNode
无法处理许多同名属性。您需要介绍uce手动反序列化或提供符合您的XML
有效负载的POJO
类。看看类似的问题:,好的,我明白。我试图重新启用重复项,但无法使用XmlMapper#enable
方法。它有很多功能,包括重复键时引发异常但不幸的是,没有办法禁用它:(
{
"id": "0",
"PUB": {
"id": "1",
"PGR": {
"id": "2",
"name": "siblingparent",
"PGR": {
"id": "4",
"name": "sibling2"
}
}
}
}