62,612
社区成员
发帖
与我相关
我的任务
分享
public class ParseXmlBase {
public List getObjectFromXml(String FileName, String SelectPath, int count)
throws XPathParseException, XPathEvalException, NavException {
List tablist = new ArrayList();
// 初始化 VTD 执行 触发器
VTDGen vg = new VTDGen();
int i;
// 根据xpath装入xml文件
AutoPilot ap = new AutoPilot();
// SelectPath 如: 根节点/子节点 根据xml的层级设置合适的路径深度
ap.selectXPath(SelectPath);
//SelectPath:"/page/tab"
// 节点位置以单例模式装入记忆坐标
BookMark bm = new BookMark();
// 装入要解析的文件返回是否解析成功
if (vg.parseFile(FileName, false)) {
//This method parses the XML file and returns a boolean indicating if it is successful or not
VTDNav vn = vg.getNav();
bm.bind(vn);
ap.bind(vn);
while ((i = ap.evalXPath()) != -1) {
// 获得tab 节点集
XmlObjectList xolist = new XmlObjectList();
xolist.setName(vn.toString(vn.getAttrVal("name")));
xolist.setReadonly(vn.toString(vn.getAttrVal("readonly")));
xolist.setDesc(vn.toString(vn.getAttrVal("desc")));
// xolist.setTabList(tablist);
bm.recordCursorPosition(); // equivalent to vn.push();
//这个地方很重要不刷新的话第一层就不能全部循环出来。
// get to the first child
XmlFieldObject xfo = new XmlFieldObject();
List xfolist = new ArrayList();
if (vn.toElement(VTDNav.FIRST_CHILD, "field")) {
// 找元素"field"
// int j = vn.getText();
// if (j != -1)
do{
xfo.setName(vn.toString(vn.getAttrVal("name")));
xfo.setReadonly(vn.toString(vn.getAttrVal("readonly")));
xfo.setDesc(vn.toString(vn.getAttrVal("desc")));
xfolist.add(xfo);}while(vn.toElement(VTDNav.NEXT_SIBLING));
}
// 将filelis装载到tab对象
xolist.setTabList(xfolist);
tablist.add(xolist);
bm.setCursorPosition();
}
// 重设xpath
ap.resetXPath();
}
return tablist;
}
public static void main(String[] args) throws XPathParseException,
XPathEvalException, NavException {
// TODO Auto-generated method stub
ParseXmlBase pxb = new ParseXmlBase();
List list = pxb.getObjectFromXml(
"f:/data/tests.xml",
"/page/tab", 1);
}
}
<?xml version="1.0" standalone="yes"?>
<page name="page">
<tab name="tab" readonly="yes" desc="t">
<field name="field1-1" readonly="yes" desc="t">z</field>
<field name="field1-2" readonly="ye" desc="ta">z</field>
</tab>
<tab name="tab" readonly="ye" desc="t">
<field name="field1-3" readonly="yes" desc="t">zhang</field>
<field name="field1-4" readonly="yes" desc="t">explor</field>
</tab>
</page>
<?xml version="1.0" standalone="yes"?>
<page name="page">
<tab name="tab" readonly="yes" desc="t">
<field name="field1-1" readonly="yes" desc="t">z</field>
<faaaa name="field1-2" readonly="ye" desc="ta">z</field>
</tab>
<tab name="tab" readonly="ye" desc="t">
<fbbbb name="field1-3" readonly="yes" desc="t">zhang</field>
<fcccc name="field1-4" readonly="yes" desc="t">explor</field>
</tab>
</page>
<?xml version="1.0" standalone="yes"?>
<page name="page">
<tab name="tab" readonly="yes" desc="t">
<field name="field1-1" readonly="yes" desc="t">z</field>
<faaaa name="field1-2" readonly="ye" desc="ta">z</faaaa>
</tab>
<tab name="tab" readonly="ye" desc="t">
<fbbbb name="field1-3" readonly="yes" desc="t">zhang</fbbbb>
<fcccc name="field1-4" readonly="yes" desc="t">explor</fcccc>
</tab>
</page>