여러 B 키로 구성된 간단한 xml 파일이 있습니다.
<?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>
숫자 키에서 목록으로 모든 값을 검색해야합니다.
여러 가지 방법을 시도했습니다.
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);
}
});
그러나, jackson이 중복 B 노드를 만나면 Number 에서 마지막 값만 가져 오는 것 같습니다. 이를 방지하고 Jackson이 중복을 고려하도록 허용하는 방법?
원하는 것은 node
숫자 값을 검색하는 것 뿐이라면 xpath 사용을 고려하십시오. XML 노드에 이중 정방향 공백을 추가하면 전체 xml 파일에서 노드를 검색합니다. 예 ://Number
예를 들면 :
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);
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다