我有一个包含xml的String:
<root>
<type>
<element>
<thing>
<otherthing>...</otherthing>
</thing>
</element>
</type>
<type>
<element>
<thing>
<otherthing>...</otherthing>
</thing>
</element>
</type>
<type>
<element>
<thing>
<otherthing>...</otherthing>
</thing>
</element>
</type>
</root>
我的树视图中需要一个treenode用于每个缩进,因此我可以在需要时扩展和收缩它,因为每个节点中有太多信息,我该怎么办?
结果应该是这样的:
ROOT
---+type
--------+element
----------------+thing
----------------------+otherthing
---+type
--------+element
----------------+thing
----------------------+otherthing
---+type
--------+element
----------------+thing
----------------------+otherthing
谢谢!
答案 0 :(得分:3)
使用xml解析器解析数据,创建表示数据的TreeItem
并使用TreeView
显示数据。
示例:
private static class TreeItemCreationContentHandler extends DefaultHandler {
private 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));
}
}
}
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();
// parse file using the content handler to create a TreeItem representation
reader.setContentHandler(contentHandler);
reader.parse(file.toURI().toString());
// use first child as root (the TreeItem initially created does not contain data from the file)
TreeItem<String> item = contentHandler.item.getChildren().get(0);
contentHandler.item.getChildren().clear();
return item;
}
// display data for file "data/tree.xml" in TreeView
TreeItem<String> root = readData(new File("data/tree.xml"));
TreeView<String> treeView = new TreeView<>(root);