这是在EclipseRCP编程中使用的部分导入类,其他使用ctrl+o自行导入
import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.NodeList;
保存文件到本地xml文件
本实验实例EntityElement,其中属性有id,name,parentId
public void run() {
FileDialog fileDialog = new FileDialog(PlatformUI.getWorkbench()
.getActiveWorkbenchWindow().getShell(), SWT.SAVE);
fileDialog.setFilterNames(new String[] { "Text Files",
"Both Files", "All Files" });
fileDialog.setFilterExtensions(new String[] { "*.xml", "*.*" });
String filename = fileDialog.open();
System.out.println(filename);//文件存储的绝对路径
try {
// 第一步:创建DOM树
DocumentBuilderFactory dbf = DocumentBuilderFactory
.newInstance();
DocumentBuilder db = dbf.newDocumentBuilder();
Document document = db.newDocument();
document.setXmlStandalone(true);
// 第二步:完善树结构
// 创建节点
Element Tree = document.createElement("Tree");
List<EntityElement> input = new ArrayList<EntityElement>();
input = getEntity(templist, input);
for (EntityElement element : input) {
Element node = document.createElement("node");
Element id = document.createElement("id");
Element name = document.createElement("name");
Element parentId = document.createElement("parentId");
// 设置节点的属性、内容
id.setTextContent("" + element.getId());
name.setTextContent(element.getName());
parentId.setTextContent(element.getParentId());
// 将子节点添加到父节点
node.appendChild(id);
node.appendChild(name);
node.appendChild(parentId);
Tree.appendChild(node);
}
document.appendChild(Tree);
// 第三步:将树结构导入本地文件中
TransformerFactory tff = TransformerFactory.newInstance();
Transformer tf = tff.newTransformer();
tf.setOutputProperty(OutputKeys.INDENT, "yes");// 节点换行
tf.transform(new DOMSource(document),
new StreamResult(filename));
} catch (Exception e) {
e.printStackTrace();
}
}
本地xml文件数据如下
<?xml version="1.0" encoding="UTF-8"?><Tree>
<node>
<id>1</id>
<name>员工管理</name>
<parentId>root</parentId>
</node>
<node>
<id>2</id>
<name>员工档案</name>
<parentId>员工管理</parentId>
</node>
<node>
<id>2</id>
<name>员工薪资</name>
<parentId>员工管理</parentId>
</node>
<node>
<id>1</id>
<name>产品管理</name>
<parentId>root</parentId>
</node>
<node>
<id>2</id>
<name>产品分析</name>
<parentId>产品管理</parentId>
</node>
<node>
<id>2</id>
<name>产品报价</name>
<parentId>产品管理</parentId>
</node>
<node>
<id>3</id>
<name>短信网址</name>
<parentId>产品报价</parentId>
</node>
<node>
<id>3</id>
<name>传统网站</name>
<parentId>产品报价</parentId>
</node>
<node>
<id>3</id>
<name>wap网站</name>
<parentId>产品报价</parentId>
</node>
</Tree>
导入本地xml文件,获取一个list集合
public List<EntityElement> getAll(String fileName) throws Exception {
// 将给定 URI 的内容解析为一个 XML 文档,并返回Document对象
DocumentBuilder db = null;
List<EntityElement> entitys;
DocumentBuilderFactory dbFactory;
dbFactory = DocumentBuilderFactory.newInstance();
db = dbFactory.newDocumentBuilder();
Document document = db.parse(fileName);
// 按文档顺序返回包含在文档中且具有给定标记名称的所有 Element 的 NodeList
NodeList entityList = document.getElementsByTagName("node");
entitys = new ArrayList<EntityElement>();
// 遍历集合
for (int i = 0; i < entityList.getLength(); i++) {
EntityElement element = new EntityElement();
// 获取第i个结点
org.w3c.dom.Node node = entityList.item(i);
// 获取结点的子节点,包含了Test类型的换行
NodeList cList = node.getChildNodes();
// 将一个实体里面的属性加入数组
ArrayList<String> contents = new ArrayList<>();
for (int j = 1; j < cList.getLength(); j += 2) {
org.w3c.dom.Node cNode = cList.item(j);
String content = cNode.getFirstChild().getTextContent();
contents.add(content);
}
element.setId(Integer.parseInt(contents.get(0)));
element.setName(contents.get(1));
element.setParentId(contents.get(2));
entitys.add(element);
}
return entitys;
}
}