15. 练习 [税费计算] 与 XML
在这个我们已经多次讲过的练习中,服务器会以 XML 流的形式将结果返回给客户端:
- <response><error>msg</error></response>(若发生错误);
- <response><tax>value</tax></response>(若成功计算税额)。
我们将运用刚刚学到的 XML 文档解析知识。
![]() |
15.1. Web 服务
该 Web 服务与之前研究过的并无二致,只是发送给客户端的 XML 响应略有不同。其架构保持不变:
![]() |
Web 服务 (impots_web_02)
注:
此 Web 服务与前一个的区别仅在于其响应的性质:
<response><error>msg</error></response>(发生错误时),而非 <error>msg</error>
若能计算税额,则返回 <response><tax>value</tax> 而非 <tax>value</tax>
15.2. 客户端应用程序
我们的客户端必须解析 Web 服务发送的 XML 响应。我们将应用在 XML 文档分析中学习到的知识。
程序(client_impots_web_02)
注:
- 来自 Web 服务的 XML 数据源由 getResultatsXml 函数处理(第 60 行);
- 第 29 行:getResultatsXml 函数;
- 第 31 行:Web 服务的 XML 响应由第 6 行定义的 XmlHandler 类的实例进行解析;
- 第 6 行:XmlHandler 类实现了 startElement、endElement 和 characters 这三个方法。利用这三个方法,创建了一个字典。其键是 <error> 和 <import> 标签的名称,值则是与这两个标签相关的数据;
- 第 33–36 行:getResultatsXml 函数返回一个包含两个元素的元组:
- (error, ""):若 XML 流分析检测到 <error> 标签,此时 error 代表该标签的内容;
- 若 XML 流分析发现存在 <import> 标签,则返回 ("", impot)。此时 impot 表示该标签的内容;
- 第 60 行:获取 getResultatsXml 函数的返回结果,并在第 61–64 行进行处理。

