我在eclipse上用java写了个插件,功能是读取xml文件里面的特定信息,并把读取到的内容在一个表格中显示出来。
目前的状况是,一方面我已经做出了表格,另一方面可以单独实现对xml文件的读取,但是表格显示的内容是在源代码里面内置的,无法将xml读取的内容给到表格,代码如下:
这是显示表格的类
package xmlplugin.view;
import org.eclipse.jface.viewers.ColumnWeightData;
import org.eclipse.jface.viewers.TableLayout;
import org.eclipse.jface.viewers.TableViewer;
import org.eclipse.swt.SWT;
import org.eclipse.swt.layout.FillLayout;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.TabFolder;
import org.eclipse.swt.widgets.TabItem;
import org.eclipse.swt.widgets.Table;
import org.eclipse.swt.widgets.TableColumn;
import org.eclipse.ui.part.ViewPart;
import xmlplugin.model.RecordFactory;
public class View extends ViewPart {
public void createPartControl(Composite parent){
// TODO Auto-generated method stub
Composite topComp = new Composite(parent, SWT.NONE);
topComp.setLayout(new FillLayout());
TableViewer tv = new TableViewer(topComp,SWT.H_SCROLL|SWT.V_SCROLL|SWT.BORDER|SWT.FULL_SELECTION);
Table table = tv.getTable();
table.setHeaderVisible(true);
table.setLinesVisible(true);
TableLayout layout = new TableLayout();
table.setLayout(layout);
layout.addColumnData(new ColumnWeightData(50));
new TableColumn(table,SWT.NONE).setText("name");
layout.addColumnData(new ColumnWeightData(50));
new TableColumn(table,SWT.NONE).setText("age");
tv.setContentProvider(new XMLTableViewerContentProvider());
tv.setLabelProvider(new XMLTableViewerLabelProvider());
Object recorddata = RecordFactory.getRecord();
tv.setInput(recorddata);
}
public void setFocus() {
// TODO Auto-generated method stub
}
}
这是相应的标签容器和内容器
package xmlplugin.view;
import java.util.List;
import org.eclipse.jface.viewers.IStructuredContentProvider;
import org.eclipse.jface.viewers.Viewer;
public class XMLTableViewerContentProvider implements IStructuredContentProvider{
public void dispose() {
// TODO Auto-generated method stub
}
public void inputChanged(Viewer viewer, Object oldInput, Object newInput) {
// TODO Auto-generated method stub
}
public Object[] getElements(Object inputElement) {
// TODO Auto-generated method stub
if(inputElement instanceof List)
return ((List)inputElement).toArray();
else
return new Object[0];
}
}
package xmlplugin.view;
import org.eclipse.jface.viewers.ILabelProviderListener;
import org.eclipse.jface.viewers.ITableLabelProvider;
import org.eclipse.swt.graphics.Image;
import xmlplugin.model.RecordEntity;
public class XMLTableViewerLabelProvider implements ITableLabelProvider{
public void addListener(ILabelProviderListener listener) {
// TODO Auto-generated method stub
}
public void dispose() {
// TODO Auto-generated method stub
}
public boolean isLabelProperty(Object element, String property) {
// TODO Auto-generated method stub
return false;
}
public void removeListener(ILabelProviderListener listener) {
// TODO Auto-generated method stub
}
public Image getColumnImage(Object element, int columnIndex) {
// TODO Auto-generated method stub
return null;
}
public String getColumnText(Object element, int columnIndex) {
// TODO Auto-generated method stub
RecordEntity r = (RecordEntity)element;
if(columnIndex==0)
return r.getName();
if(columnIndex==1)
return r.getAge();
return null;
}
}
这是为了存储从xml读取的变量和给表格赋值的类
package xmlplugin.model;
public class RecordEntity {
private String name;
private String age;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getAge() {
return age;
}
public void setAge(String age) {
this.age = age;
}
}
package xmlplugin.model;
import java.util.ArrayList;
import java.util.List;
import xmlplugin.util.XMLParse;
public class RecordFactory {
public static List getRecord(){
List list = new ArrayList();
RecordEntity r = new RecordEntity();
r.setName("sss");
r.setAge("18");
list.add(r);
return list;
}
}
这是读取xml文件的类
package xmlplugin.util;
import org.dom4j.Document;
import org.dom4j.DocumentException;
//import org.dom4j.DocumentException;
import org.dom4j.Element;
import org.dom4j.io.SAXReader;
public class XMLParse {
public static String FILEPATH="F:\\test.xml";
public static String get(String filepath){
SAXReader reader = new SAXReader();
Document document = null;
try {
document = reader.read(filepath);
} catch (DocumentException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
Element root = document.getRootElement();
Element re = root.element("re");
String output = re.attributeValue("name");
return output;
}
}
在内置(setName方法直接给双引号中间写字符串的形式)表格要显示的内容的时候一切正常,但是一旦把内置改成调用XMLParse类里面的方法来赋值的时候就出错了,但是xml得读取一切正常,求大神帮忙看看哪里出问题了,感激不尽。
图1位正常情况下的表格,图2则是对xml读取的验证,图3是将内置改为调用方法,图4是修改后表格的样子。
xml文件如下:
<?xml version="1.0" encoding="UTF-8"?>
<root>
<va>
<cba>321</cba>
</va>
<re
name="ccc"
age="999">
</re>
</root>