Как разобрать XML с помощью Jackson API? - PullRequest
0 голосов
/ 29 мая 2018

Я использую API Джексона для разбора объекта xml.

<BESAPI xsi:noNamespaceSchemaLocation="BESAPI.xsd">
    <Employee Resource="https://abc:52311/api/employee/100"/>
    <Employee Resource="https://abc:52311/api/employee/200"/>
    <Employee Resource="https://abc:52311/api/employee/300"/>
    <Employee Resource="https://abc:52311/api/employee/400"/>
</BESAPI>

это структура записей xml.Я хочу получить список всех ресурсов в виде строки.Как я могу добиться этого, используя Jackson api?

Ответы [ 2 ]

0 голосов
/ 23 июня 2018

SimpleXml может сделать это:

final String data = ...
final SimpleXml simple = new SimpleXml();
final Element element = simple.fromXml(data);
for (final Element employee : element.children) {
    System.out.println(employee.attributes.get("Resource"));
}

Будет выводить:

https://abc:52311/api/employee/100
https://abc:52311/api/employee/200
https://abc:52311/api/employee/300
https://abc:52311/api/employee/400

Из центрального центра Maven:

<dependency>
    <groupId>com.github.codemonstur</groupId>
    <artifactId>simplexml</artifactId>
    <version>1.4.0</version>
</dependency>
0 голосов
/ 30 мая 2018

Сначала вам нужно написать несколько классов Java, моделирующих ваш контент XML.Классы получают аннотации @JacksonXml..., чтобы сообщить Джексону соответствие между XML и Java.Эти аннотации особенно важны, когда имя Java отличается от имени XML.

Один класс предназначен для представления корневого элемента <BESAPI>:

@JacksonXmlRootElement(localName = "BESAPI")
public class BESAPI {

    @JacksonXmlProperty(isAttribute = true, localName = "noNamespaceSchemaLocation", namespace = XMLConstants.W3C_XML_SCHEMA_INSTANCE_NS_URI)
    private String noNamespaceSchemaLocation;

    @JacksonXmlProperty(isAttribute = false, localName = "Employee")
    @JacksonXmlElementWrapper(useWrapping = false)
    private List<Employee> employees;

    // public getters and setters (omitted here for brevity)
}

, а другой класс для представления <Employee> element

public class Employee {

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

    // public getters and setters (omitted here for brevity)
}

Затем вы можете использовать XmlMapper Джексона для чтения содержимого XML.

XmlMapper xmlMapper = new XmlMapper();
File file = new File("example.xml");
BESAPI besApi = xmlMapper.readValue(file, BESAPI.class);
for (Employee employee : besApi.getEmployees()) {
    System.out.println(employee.getResource());
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...