我有以下XML文件:
<Response Version="X">
<Status StatusCode = "OK">
<Internal>
<SP>
<URL>SP_url_1</URL>
</SP>
<SP>
<URL>SP_url_2</URL>
</SP>
</Internal>
<Response>我希望获得一个数组中的所有URL元素的文本。
我实现了以下内容:
...perform一个HTTP GET请求...
response_xml = REXML::Document.new(response.body).root
if response_xml.nil? or response_xml.name != 'Response'
raise ParseError, "Invalid service discovery response!"
end
status_code = response_xml.elements['Status'].attribute('StatusCode').value
if status_code == 'OK'
urls = response_xml.elements.each('//URL') { |u| u }
end
urls关于这一行response_xml.elements.each('//URL') { |u| u },你能推荐一种更干净的方法来获取数组中的所有URL元素吗?也许有一种更明智的方法可以通过REXML方法来实现,但现在还不能看到它。
欢迎任何其他REXML或通用代码建议。
发布于 2012-12-14 01:08:28
我非常喜欢在我的XML解析器中使用Nokogiri:
require 'nokogiri'
doc = Nokogiri::XML(<<EOT)
<Response Version="X">
<Status StatusCode = "OK">
<Internal>
<SP>
<URL>SP_url_1</URL>
</SP>
<SP>
<URL>SP_url_2</URL>
</SP>
</Internal>
<Response>
EOT
if (doc.at('Status')['StatusCode'] == 'OK')
urls = doc.search('URL').map(&:text)
# => ["SP_url_1", "SP_url_2"]
end或者:
urls = doc.search('URL').map(&:text) if (doc.at('Status')['StatusCode'] == 'OK')发布于 2012-12-14 00:28:50
要使用XPath获取文本节点,可以使用text()
urls = response_xml.elements.each('//URL/text()') { |u| u }https://stackoverflow.com/questions/13863431
复制相似问题