如果你想连接一个 Opa 网络客户端和一个 XML-RPC 服务器。发送请求的正确方式大概是
xml request_body = @xml(
<methodCall>
<methodName>my_rpc_method</methodName>
<params>some_rpc_params</params>
</methodCall>
)
request = WebClient.Post.of_xml(
{WebClient.Post.default_options with
content: {some: request_body}
}
)
WebClient.Post.try_post_with_options_async(
server_uri,
request,
callback
)
function callback(response) {
...
}
现在,将服务器响应解析回 Opa XML 数据结构的正确方法是什么?我目前已经为此创建了自己的 XML 解析器,但这肯定不是最佳做法。
API显示了几个 XML 解析函数,例如:
- Xml_parser.try_parse
- XmlConvert.of_string
- Xmlns.try_parse (顺便说一下,Opa 中的 Xml 和 Xmlns 数据类型有什么区别?)
- ...
但是哪一个是正确的呢?该文档(还)没有详细说明它们的用法。或者通过 WebClient.Result.as_xml 直接以 XML 形式转换服务器响应可能是正确的?
我创建了一个 repository包含具有给定问题的可运行代码。随意 fork 并修复它。
将此类 XML 服务器响应解析为相应数据结构的最佳(也是最简单)方法是什么?
杰汉内斯
最佳答案
好的,这就是您提到的三个函数的作用:
Xml_parser.try_parse
是调用 XML 解析器 的函数。 XML 解析器是使用xml_parser
关键字构建的,有点类似于 Opa 的parser
,只是它们解析 XML,而不是文本。XmlConvert.of_string
是一个将string
转换为xml
的函数,因此它是一个简单的函数,仅构建由文本组成的 XML节点。Xmlns.try_parse
尝试相反的转换:即它采用string
并尝试将其解析为 `xml'。
因此,如果您收到一个字符串响应并想要处理它,那么您通常会:
- 使用
Xmlns.try_parse
将其解析为xml
- 构建了一个
xml_parser
- 使用
Xml_parser.try_parse
调用它以获得 XML 数据的结构表示。
如果您立即以 XML 格式获取数据,则可以跳过上面的第一步。让我知道这是否有帮助。
关于xml - 如何用 Opa 解析 XML?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10923419/