本文概述
GWT XML(可扩展标记语言)使用自定义标签描述数据并将数据编码为纯文本。它更加灵活且易于操作。
模块XML格式
模块在XML文件中定义, 扩展名应为.gwt.xml。它位于项目包的根目录中。以下是使用标准项目结构的代码:
<module>
<inherits name="com.google.gwt.user.User"/>
<entry-point class="com.example.cal.client.CalendarApp"/>
</module>
解析XML
为了解析XML文本, 我们必须首先将原始XML文本解析为XM1 DOM结构。 DOM结构有助于数据导航。 XML解析器位于XMLParser类下。 XMLParser类由parse(String)静态方法组成, 该方法被调用以解析XML并返回Document对象。
为了处理解析期间发生的错误(例如, 如果XML格式不正确), 则XMLParser将抛出DOMException。如果解析成功, 则我们收到的Document对象代表内存中的XML文档。
成功解析后, 它将创建以下节点:
- 元素-表示DOM元素, 由XML <someElement> </ someElement>中的标记指定。
- 文本-表示元素的开始标记和结束标记之间的文本:<someElement>此处是一些文本。</ someElement>。
- 注释-表示XML注释:<!-有关此数据的注释->。
- Attr-表示元素的属性:<someElement myAttribute =“ 123” />。
实作
以下是包含电子邮件消息的XML代码:
<?xml version="1.0" ?>
<message>
<header>
<to displayName="srcmini" address="hr@srcmini02.com" />
<from displayName="sssit" address=?hr@sssit.org" />
<sent>2017-03-10T12:03:55Z</sent>
<subject>Re: GWT tutorial</subject>
</header>
<body>gwt tutorial is being developed.</body>
</message>
下面的代码用于从xml提取信息:
private void parseMessage(String messageXml) {
try {
// parse the XML document into a DOM
Document messageDom = XMLParser.parse(messageXml);
// find the sender's display name in an attribute of the <from> tag
Node fromNode = messageDom.getElementsByTagName("from").item(0);
String from = ((Element)fromNode).getAttribute("displayName");
fromLabel.setText(from);
// get the subject using Node's getNodeValue() function
String subject = messageDom.getElementsByTagName("subject").item(0).getFirstChild().getNodeValue();
subjectLabel.setText(subject);
// get the message body by explicitly casting to a Text node
Text bodyNode = (Text)messageDom.getElementsByTagName("body").item(0).getFirstChild();
String body = bodyNode.getData();
bodyLabel.setText(body);
} catch (DOMException e) {
Window.alert("Could not parse XML document.");
}
}
GWT XML构造函数
建设者 | 描述 |
---|---|
XMLTools() | 它构造了不同的工具选项。 |
GWT XML通用方法
方法 | 描述 |
---|---|
disableIEXMLHackaround() | 它针对不能明确声明“ xml”名称空间前缀的MSXML错误, 禁用了Internet Explorer的解决方法。 |
loadWSDL(String wsdlURL, WSDLLoadCallback callback) | 它加载WSDL文件并创建WebService实例, 该实例允许调用操作并将DataSources绑定到Web服务操作。 |
loadWSDL(String wsdlURL, WSDLLoadCallback callback, RPCRequest requestProperties) | 它加载WSDL文件并创建WebService实例, 该实例允许调用操作并将DataSources绑定到Web服务操作。 |
loadWSDL(String wsdlURL, WSDLLoadCallback callback, RPCRequest requestProperties, boolean autoLoadImports) | 它加载WSDL文件并创建WebService实例, 该实例允许调用操作并将DataSources绑定到Web服务操作。 |
loadXMLSchema(String schemaURL, XSDLoadCallback callback) | 它加载包含XML模式定义的XML文件, 并创建DataSource和SimpleType对象以表示模式。 |
loadXMLSchema(String schemaURL, XSDLoadCallback callback, RPCRequest requestProperties) | 它加载包含XML模式定义的XML文件, 并创建DataSource和SimpleType对象以表示模式。 |
nativeXMLAvailable() | 如果当前浏览器公开了可用于Smart GWT XML操作(如Web服务绑定和XML处理)的XML解析器, 则返回true。 |
selectNodes(Object element, String expression) | 它基于XPath表达式从XML元素或文档中检索一组节点。 |
selectNodes(Object element, String expression, Map namespaces) | 它基于XPath表达式从XML元素或文档中检索一组节点。 |
toJS(Object elements) | 它将XML片段转换为JavaScript集合。 |
GWT XML上传
在本节中, 我们将创建一个包含GWT文件上传和表单面板小部件的上传面板。它允许用户将zip文件上传到服务器。
前端设计
为了通过xml存储信息, 我们从两个面板(UploadPanel和DataStorePanel)设计了前端。
DataStorePanel.ui.xml
<!DOCTYPE ui:UiBinder SYSTEM "http://dl.google.com/gwt/DTD/xhtml.ent">
<ui:UiBinder xmlns:ui="urn:ui:com.google.gwt.uibinder"
xmlns:g="urn:import:com.google.gwt.user.client.ui" xmlns:f="urn:import:in.fins.client.widget">
<g:LayoutPanel>
<g:layer left='10%' width='60%' top='10%' height='60%'>
<g:VerticalPanel spacing="40">
<f:UploadPanel />
</g:VerticalPanel>
</g:layer>
</g:LayoutPanel>
</ui:UiBinder>
上传面板
在此小部件中, 我们创建表单以上传文件, 并创建按钮以清除符号列表。
UploadPanel.ui.xml
<g:CaptionPanel captionText="Upload">
<g:HorizontalPanel>
<g:VerticalPanel>
<g:FormPanel ui:field="uploadForm" action="/upload">
<g:Grid>
<g:row>
<g:customCell>
<g:Label text="Zip file" />
</g:customCell>
<g:customCell>
<g:FileUpload name="uploadFormElement" />
</g:customCell>
<g:customCell>
<g:Button text="Upload" ui:field="uploadButton" />
</g:customCell>
<g:customCell>
<g:Hidden name="action" value="uploadAndParse" />
</g:customCell>
</g:row>
</g:Grid>
</g:FormPanel>
</g:VerticalPanel>
<g:VerticalPanel>
<g:FormPanel ui:field="clearListForm" action="/upload">
....
</g:FormPanel>
</g:VerticalPanel>
</g:HorizontalPanel>
</g:CaptionPanel>
Upload.java
public UploadPanel() {
initWidget(uiBinder.createAndBindUi(this));
uploadForm.setMethod(FormPanel.METHOD_POST);
uploadForm.setEncoding(FormPanel.ENCODING_MULTIPART);
}
@UiHandler("uploadButton")
void onUploadClick(ClickEvent event) {
uploadForm.submit();
}
@UiHandler("uploadForm")
void onUploadFormSubmitComplete(SubmitCompleteEvent event) {
StatusEvent se = new StatusEvent(event.getResults());
EventBus.get().fireEvent(se);
}
输出:
评论前必须登录!
注册