【仅供内部供应商使用,不提供对外解答和培训】

Page tree

【仅供内部供应商使用,不提供对外解答和培训】

Skip to end of metadata
Go to start of metadata

You are viewing an old version of this page. View the current version.

Compare with Current View Page History

« Previous Version 3 Next »

前言

在插件开发中,遇到需要持久化对象或者保存配置信息的情况,就需要读写xml文件。

示例

我们以在WorkBook对象中扩展IOFileAttrMark属性为例子:

一个完全空的模板,其xml文件(即cpt文件)大致为下面的样子

模板的xml文件
<?xml version="1.0" encoding="UTF-8"?>
<WorkBook xmlVersion="20151125" releaseVersion="8.0.0">
<Report class="com.fr.report.worksheet.WorkSheet" name="sheet1">
<ReportPageAttr>
<HR/>
<FR/>
<HC/>
<FC/>
</ReportPageAttr>
<ColumnPrivilegeControl/>
<RowPrivilegeControl/>
<RowHeight defaultValue="723900">
<![CDATA[723900,723900,723900,723900,723900,723900,723900,723900,723900,723900,723900,723900,723900,723900,723900,723900,723900,723900,723900,723900,723900,723900,723900,723900,723900,723900,723900,723900,723900,723900,723900,723900,723900,723900,723900,723900,723900,723900,723900,723900,723900,723900,723900,723900,723900,723900,723900,723900,723900,723900,723900]]></RowHeight>
<ColumnWidth defaultValue="2743200">
<![CDATA[2743200,2743200,2743200,2743200,2743200,2743200,2743200,2743200,2743200,2743200,2743200,2743200,2743200,2743200,2743200,2743200,2743200,2743200,2743200,2743200,2743200]]></ColumnWidth>
<CellElementList>
<C c="0" r="0">
<PrivilegeControl/>
<Expand/>
</C>
</CellElementList>
<ReportAttrSet>
<ReportSettings headerHeight="0" footerHeight="0">
<PaperSetting/>
</ReportSettings>
</ReportAttrSet>
<PrivilegeControl/>
</Report>
<StyleList/>
<DesignerVersion DesignerVersion="IAA"/>
<PreviewType PreviewType="0"/>
</WorkBook>

我们略去所有空的和不重要的节点,大概就是这样

忽略不重要节点后的xml文件
<?xml version="1.0" encoding="UTF-8"?>
<WorkBook xmlVersion="20151125" releaseVersion="8.0.0">
<Report class="com.fr.report.worksheet.WorkSheet" name="sheet1">
<DesignerVersion DesignerVersion="IAA"/>
<PreviewType PreviewType="0"/>
</WorkBook>

然后我们使用给模板增加一个额外的属性的插件,简单的打开一个额外属性设计界面并保存,可以看到模板的xml文件(忽略掉不重要节点后)大概是这样的

额外属性
<?xml version="1.0" encoding="UTF-8"?>
<WorkBook xmlVersion="20151125" releaseVersion="8.0.0">
<Report class="com.fr.report.worksheet.WorkSheet" name="sheet1">
<DesignerVersion DesignerVersion="IAA"/>
<PreviewType PreviewType="0"/>
<SomeConfig class="com.fr.plugin.io.file.SomeConfig">
<Attr status="100"/>
</SomeConfig>
</WorkBook>

写入SomeConfig节点的方式,就是在writeXML的时候,调用了

写xml
public void writeConfig(XMLPrintWriter writer, SomeConfig config) {
   GeneralXMLTools.writeXMLable(writer, config, "SomeConfig");
}

同样的,在读取xml的时候,也就是把配置文件转化为WorkBook对象时,在读取SomeConfig节点的时候,是这样的

读取xml
protected void readExtra(XMLableReader reader) {
   if (reader.isChildNode()) {
      String tagName = reader.getTagName();
      if (tagName.equals("SomeConfig")) {
          SomeConfig config = new SomeConfig();
          reader.readXMLObject(config);
          this.addAttrMark(config);
      }
   }
}

在调用了reader.readXMLObject(config);这句之后,就将xml中设置的属性赋值给了config对象了。

  • No labels