我正在开发JavaFx应用程序。我有一个XML文件(“ layoutConfigurationFileXML.xml”),该文件按照我在Internet上在线找到的解决方案加载到TreeView结构中。
public class TreeItemCreationContentHandler extends DefaultHandler { public TreeItem<String> item = new TreeItem<>(); @Override public void endElement(String uri, String localName, String qName) throws SAXException { // finish this node +by going back to the parent this.item = this.item.getParent(); } @Override public void startElement(String uri, String localName, String qName, Attributes attributes) throws SAXException { // start a new node and use it as the current item TreeItem<String> item = new TreeItem<>(qName); this.item.getChildren().add(item); this.item = item; } @Override public void characters(char[] ch, int start, int length) throws SAXException { String s = String.valueOf(ch, start, length).trim(); if (!s.isEmpty()) { // add text content as new child this.item.getChildren().add(new TreeItem<>(s)); } }
这是我在主控制器中调用的函数:
@FXML public void loadConfigTextArea(){ try { TreeItem<String> root = readData(new File("layoutConfigurationFileXML.xml")); treeXml.setRoot(root); treeXml.setEditable(true); root.setExpanded(true); treeXml.setCellFactory(new Callback<TreeView<String>, TreeCell<String>>() { private final MyContextMenu contextMenu = new MyContextMenu(); private final StringConverter converter = new DefaultStringConverter(); @Override public TreeCell<String> call(TreeView<String> param) { return new CustomTreeCell(contextMenu, converter); } }); } catch (SAXException e) { e.printStackTrace(); } catch (ParserConfigurationException e){ e.printStackTrace(); } catch (IOException e){ e.printStackTrace(); } }
其中treeXml是.fxml文件中我的treeView的ID。
函数readData(File file)
使用SAX库:
public static TreeItem<String> readData(File file) throws SAXException, ParserConfigurationException, IOException { SAXParserFactory parserFactory = SAXParserFactory.newInstance(); SAXParser parser = parserFactory.newSAXParser(); XMLReader reader = parser.getXMLReader(); TreeItemCreationContentHandler contentHandler = new TreeItemCreationContentHandler(); reader.setContentHandler(contentHandler); reader.parse(file.toURI().toString()); //SPConfigurationManager.layoutConfiguration.getCONFIGURATION() TreeItem<String> item = contentHandler.item.getChildren().get(0); contentHandler.item.getChildren().clear(); return item; }
一切正常。现在,由于用户有机会修改TreeView,所以我想做相反的操作:将TreeView结构保存在“ layoutConfigurationFileXML.xml”文件中。我尝试使用JAXB库,但对我来说还不是很清楚如何进行。有什么建议吗?
我正在开发JavaFx应用程序。按照我在Internet上在线找到的解决方案,我有一个XML文件(“ layoutConfigurationFileXML.xml”)以TreeView结构加载。公共类...
JAXB要求您对相同类型的元素使用相同的元素名称,即您的输出看起来像这样