ruby-rexml:干净地解析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>

我有以下XML文件:

<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')