Java 如何在反序列化xml时允许使用jackson复制密钥

Java 如何在反序列化xml时允许使用jackson复制密钥,java,xml,jackson2,jackson-dataformat-xml,Java,Xml,Jackson2,Jackson Dataformat Xml,我有一个简单的xml文件,结构如下,有多个B键 <?xml version="1.0" encoding="UTF-8"?> <Example> <ExampleId>0000</ExampleId> <Name>test</Name> <Important1> <Id> <Number>1111111

我有一个简单的xml文件,结构如下,有多个B

<?xml version="1.0" encoding="UTF-8"?>
<Example>
   <ExampleId>0000</ExampleId>
   <Name>test</Name>
   <Important1>
      <Id>
         <Number>1111111111</Number>
      </Id>
   </Important1>
   <B>
      <Name>test2</Name>
      <Important2>
         <Id>
            <Number>2222222222</Number>
         </Id>
      </Important2>
   </B>
   <B>
      <Name>test3</Name>
      <Important2>
         <Id>
            <Number>3333333333</Number>
         </Id>
      </Important2>
   </B>
</Example>

0000
测试
1111111111
测试2
2222222222
测试3
3333333333
我需要从列表的Number键中检索所有值
我尝试了多种方法

JsonNode numberParser = xmlMapper.readTree(inputStream);
JsonNode node1 = numberParser.get("Example");
            
//first try
List<String> list =node1.findValuesAsText("Number");
            
//second try
List<String> list =new ArrayList<String>();
node1.fields().forEachRemaining(firstEntry -> {
    if(firstEntry.getKey().equals("Important1")){
            JsonNode fieldsNode = firstEntry.getValue();
            String numberFromImportant1 = fieldsNode.findValue("Number").asText();
            list.add(numberFromImportant1);
    }
    if(firstEntry.getKey().equals("B")){
            JsonNode fieldsNode = firstEntry.getValue();
            String numberFromImportant2 = fieldsNode.findValue("Number").asText();
            list.add(numberFromImportant2);
    }
});
JsonNode numberParser=xmlMapper.readTree(inputStream);
JsonNode node1=numberParser.get(“示例”);
//初试
List List=node1.findValuesAsText(“编号”);
//第二次尝试
列表=新的ArrayList();
node1.fields().forEachRemaining(firstEntry->{
if(firstEntry.getKey().equals(“Important1”)){
JsonNode fieldsNode=firstEntry.getValue();
String numberFromImportant1=fieldsNode.findValue(“数字”).asText();
列表.添加(numberfromportant1);
}
if(firstEntry.getKey().equals(“B”)){
JsonNode fieldsNode=firstEntry.getValue();
String numberFromImportant2=fieldsNode.findValue(“数字”).asText();
列表.添加(numberfromportant2);
}
});
但是,如果jackson在反序列化时遇到重复的B节点,它似乎只从Number中获取最后一个值
有什么办法来阻止这个,并允许杰克逊重复考虑吗?

< P>如果你想做的就是检索<代码>节点< /代码>号的值,那么考虑使用XPath。向XML节点添加双前进空间将搜索该节点(在整个XML文件中)。例如:
//数字

例如:

Document xmlDocument = builder.parse(inputStream);
this.clean(xmlDocument);
XPath xPath = XPathFactory.newInstance().newXPath();
String expression = "//Number";
nodeList = (NodeList) xPath.compile(expression).evaluate(xmlDocument, XPathConstants.NODESET);

谢谢,它就像一个符咒:)