ruby-rexml:干净地解析xml文件
我有以下XML文件:ruby-rexml:干净地解析xml文件,ruby,xml-parsing,rexml,Ruby,Xml Parsing,Rexml,我有以下XML文件: <Response Version="X"> <Status StatusCode = "OK"> <Internal> <SP> <URL>SP_url_1</URL> </SP> <SP> <URL>SP_url_2</URL> </SP> </Internal>
<Response Version="X">
<Status StatusCode = "OK">
<Internal>
<SP>
<URL>SP_url_1</URL>
</SP>
<SP>
<URL>SP_url_2</URL>
</SP>
</Internal>
<Response>
关于这行response_xml.elements.each('//URL'){u|u}
,您能推荐一种更干净的方法来获取数组中的所有URL元素吗?也许有一种更明智的方法可以通过REXML方法实现,但现在还看不到
欢迎使用任何其他REXML或通用代码建议。要使用XPath获取文本节点,可以使用
text()
:
对于我的XML解析器,我非常喜欢使用:
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 = response_xml.elements.each('//URL/text()') { |u| u }
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')