У меня есть генератор java-класса из схемы xsd с JAXB
.В классе Main у меня есть метод с именем recursiveNodeList(NodeList list)
, который просто берет список узлов и рекурсивно просматривает его, чтобы получить из него все значения.
Все работает, кроме одной вещи, которую я просто не могу понять.
В приведенном ниже коде у меня есть эти две строки:
item.setNote("Notetest1");
item.setTitle("Title1");
Когда я запускаю код, я получаю этот вывод:
title->#text->Title1
note->#text->Notetest1
Если я просто использую одну изстроки, например:
item.setNote("Notetest1");
// item.setTitle("Title1"); /*commented out*/
Я получаю этот вывод:
item->note->null
Почему примечание является нулевым, если я просто устанавливаю это значение и не вызываю setTitle()
и почему оно имеетзначение, когда я вызываю setNote
и setTitle?
Код в целом:
public class JavaXML {
public static void main(String[] args) throws ParserConfigurationException, JAXBException, FileNotFoundException {
Item item = new Item();
JAXBContext jaxb = JAXBContext.newInstance(item.getClass().getPackage().getName());
Marshaller marshaller = jaxb.createMarshaller();
item.setNote("Notetest1");
item.setTitle("Title1");
DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
dbf.setNamespaceAware(true);
DocumentBuilder db = dbf.newDocumentBuilder();
Document doc = db.newDocument();
marshaller.marshal(item, doc);
NodeList nodeList = doc.getChildNodes();
recursiveNodeList(nodeList);
}
public static void recursiveNodeList(NodeList nodeList) {
for(int i = 0; i< nodeList.getLength(); i++) {
Node fstNode = nodeList.item(i);
if (fstNode.getNodeType() == Node.ELEMENT_NODE) {
Element fstElmnt = (Element) fstNode;
if(fstElmnt.getChildNodes().getLength() > 1) {
NodeList fstNmElmntLst = fstElmnt.getChildNodes();
recursiveNodeList(fstNmElmntLst);
} else {
NodeList fstNmElmntLst = fstElmnt.getChildNodes();
if(((Node)fstNmElmntLst.item(0)) != null)
System.out.println(fstNode.getNodeName()+"->"+((Node)fstNmElmntLst.item(0)).getNodeName() + "->"+((Node)fstNmElmntLst.item(0)).getNodeValue());
}
}
}
}
}
РЕДАКТИРОВАТЬ
Еще один вопрос:Если я вместо установки заголовка и заметки, установите категорию следующим образом:
Category category = new Category();
category.setStringOne("string1");
category.setStringTwo("string2");
item.setCategory(category);
Тогда вывод будет:
item->category->string1string2
Есть ли способ получить "string1"и значения "string2" в отдельные переменные без использования методов манипуляции со строками?