...
我们以实际的示例来看这两个类的使用,示例代码以自定义的网页框为例子,源码在这里,下面就以这个额自定义控件中设计到读取XML的部分代码为例子进行具体的讲解。先来看一下在表中添加了一个网页框控件后,表单的XML文件(frm文件)中关于这个控件的XML片段:,下面就以这个自定义控件中设计到读取XML的部分代码为例子进行具体的讲解。先来看一下在表中添加了一个网页框控件后,表单的XML文件(frm文件)中关于这个控件的XML片段:
| Code Block |
|---|
| language | xml |
|---|
| title | 网页框控件XML片段 |
|---|
| linenumbers | true |
|---|
| collapse | true |
|---|
|
<InnerWidget class="com.fr.plugin.form.widget.core.RHIframe">
<WidgetName name="rHIframe0"/>
<WidgetAttr>
<PrivilegeControl/>
</WidgetAttr>
<Attr scrollX="true" scrollY="true"/>
<RHIframeAttr class="com.fr.plugin.form.widget.core.RHIframeAttr">
<RHIframeSource class="com.fr.plugin.form.widget.core.TemplateSource">
<Attr path="/mark.cpt"/>
</RHIframeSource>
<Parameters/>
</RHIframeAttr>
</InnerWidget> |
...
| Code Block |
|---|
| language | java |
|---|
| title | writeXML |
|---|
| linenumbers | true |
|---|
| collapse | true |
|---|
|
@Override
public void writeXML(XMLPrintWriter writer) {
super.writeXML(writer);
writer.startTAG("Attr");
writer.attr("scrollX", overflowX);
writer.attr("scrollY", overflowY);
writer.end();
if (attr != null) {
GeneralXMLTools.writeXMLable(writer, attr, RHIframeAttr.XML_TAG);
}
}
} |
...
| Code Block |
|---|
| language | xml |
|---|
| title | Attr | collapse | true |
|---|
|
<Attr scrollX="true" scrollY="true"/> |
...
| Code Block |
|---|
| language | xml |
|---|
| title | RHIframeAttr |
|---|
| collapse | true |
|---|
|
<RHIframeAttr class="com.fr.plugin.form.widget.core.RHIframeAttr">
<RHIframeSource class="com.fr.plugin.form.widget.core.TemplateSource">
<Attr path="/mark.cpt"/>
</RHIframeSource>
<Parameters/>
</RHIframeAttr> |
...
| Code Block |
|---|
| language | java |
|---|
| title | readXML |
|---|
| linenumbers | true | collapse | true |
|---|
|
@Override
public void readXML(XMLableReader reader) {
super.readXML(reader);
if (reader.isChildNode()) {
String nodeName = reader.getTagName();
if ("Attr".equals(nodeName)) {
this.overflowX = reader.getAttrAsBoolean("scrollX", true);
this.overflowY = reader.getAttrAsBoolean("scrollY", true);
} else if (RHIframeAttr.XML_TAG.equals(nodeName)) {
this.attr = (RHIframeAttr) GeneralXMLTools.readXMLable(reader);
}
}
} |
...
| Code Block |
|---|
GeneralXMLTools#readXMLable(XMLableReader); |
如果希望进一步了解和学习嵌套XML的读写,可以进一步参考RHIframe对象的属性RHIframeAttr的XML读写,参考上面的讲解,应该可以更加深刻的了解。
其他
...
文本节点读写
| Code Block |
|---|
|
<Text><![CDATA[My Text]]></Text> |
其中的CDATA标记是为了防止XML文本中出现了特殊字符导致XML无法解析其中的CDATA标记是为了防止XML文本中出现了特殊字符导致XML无法解析
上面的XML,写的方式为:
| Code Block |
|---|
|
writer.startTAG("Text");
writer.textNode("My Text");
writer.end(); |
...
| Code Block |
|---|
|
if ("Text".equals(nodeName)) {
String text = reader.getElementValue();
} |
注意事项
写XML的时候,XMLPrintWriter#startTAG方法和XMLPrintWriter#end方法一定要成对出现,否则就会写出下面这样的XML
| Code Block |
|---|
|
<Text><![CDATA[My Text]]> |
这样会导致整个XML无法解析,模板也就无法正确读取了。