У меня есть XML в следующем формате:
<servers>
<server_1>
<name>S1</name>
<user>User1</user>
<pass>pass1</pass>
</server_1>
<server_2>
<name>S2</name>
<user>User2</user>
<pass>pass2</pass>
</server_2>
<server_3>
<name>S3</name>
<user>User3</user>
<pass>pass3</pass>
</server_3>
</servers>
На серверах может быть несколько дочерних элементов.И у меня возникли проблемы с выяснением, как разобрать их с помощью JAXB unmarshel.Если бы у ребенка было одинаковое имя, я мог бы просто разобрать его в списке.
Я также посмотрел на аннотацию @XMLAnyElement, которая позволила бы мне поместить эти элементы в список, но я столкнулся с некоторыми проблемами приведения типов, поскольку при этом возникает ElementNSImpl, а затем мне нужно преобразовать его в простой сервер.вступительный класс.Это единственный способ обработать такой случай?
Не могу ли я использовать регулярное выражение в поле имени @ XMLElement для заполнения таких записей, игнорируя различные теги (server_1, server_2 и т. Д.) Или любым другим способом игнорирования другого дочернего элементатеги элементов.
Я использовал это руководство для понимания поведения XMLAnyElement: http://blog.bdoughan.com/2010/08/using-xmlanyelement-to-build-generic.html, но на самом деле это не для моего случая использования.
Другой подход, о котором я думализменив сам родительский xml и заменив теги типа server_X на сервер с помощью Java FileReaders, прежде чем разбирать XML-файл.
Буду признателен за помощь или за указание в правильном направлении.
Редактировать: я вижу, что следующий код работает -
..
..
@XmlAnyElement
public List<ElementNSImpl> getServer() {
return server;
}
..
..
public void printElem() {
if(server!=null) {
for(ElementNSImpl serverEntry :server) {
NodeList nodeList= ftpEntry.getChildNodes();
System.out.println("length:"+nodeList.getLength());
for(int i=0;i<nodeList.getLength()-1;i++)
System.out.println(nodeList.item(i).getNodeName()+" :"+nodeList.item(i).getTextContent());
}
}
}
Но Java выдает предупреждение об использовании ElementNSImpl напрямую:
Access restriction: The type 'ElementNSImpl' is not API (restriction on required library 'C:\Program Files (x86)\Java\jre1.8.0_171\lib\rt.jar')
Так что я не уверен, если этоможно использовать ElementNSImpl следующим образом.