Forum: Ruby REXML, XPath and Namespace

Announcement (2017-05-07): www.ruby-forum.com is now read-only since I unfortunately do not have the time to support and maintain the forum any more. Please see rubyonrails.org/community and ruby-lang.org/en/community for other Rails- und Ruby-related community platforms.
57986d7b371e6354497ba12ec5855b19?d=identicon&s=25 hinsen (Guest)
on 2007-06-16 12:30
Hi.

I want to parse an xml file using REXML::XPath. I can easily navigate
through the xml-tree with methods like 'XPath.match(xml, "child::*")'
and. But i can't
access nodes with the structure 'prefix:name'. Even this call is not
working (it doesn't hit any node):

sub_tags = REXML::XPath.match(xml, "/rss/channel/item/dc:date", {
"dc"=>"http://purl.org/dc/elements/1.1/" })

Do you know what i'am doing wrong?
Thanks

<?xml version="1.0" encoding="UTF-8"?>
<rss xmlns:geo="http://www.w3.org/2003/01/geo/wgs84_pos#" version="2.0"
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:xCal="urn:ietf:params:xml:ns:xcal">
  <channel>
    <title>Zvents search for events matching   within 60 miles of
6</title>
    <link>http://www.zvents.com/search?...</link>
    <ttl>60</ttl>
    <description>Zvents search for even Germany
returesults.</description>
    <stream_count>2</stream_count>
    <item>
      <title>MIR DETSTWA</title>
      <description>International Exhibition of Goods for
Childg</description>
      <summary></summary>
      <phone></phone>
      <guid>http://www.zvents.com/events/show/896719-MIR-DETST...
      <link>http://www.zvents.com/events/show/896719-MIR-DETST...
      <dc:creator>mBLAST</dc:creator>
      <id>896719</id>
      <parent_id></parent_id>
      <series_count></series_count>
      <geo:lat>50.12</geo:lat>
      <geo:long>8.68</geo:long>
      <pubDate>Wed, 30 May 2007 07:11:46 +0000</pubDate>
      <dc:date>2007-05-30T07:11:46+0000</dc:date>
      <xCal:dtstart>2007-10-03 00:00:00 +0000</xCal:dtstart>
      <xCal:dtend>2007-10-07 00:00:00 +0000</xCal:dtend>
      ...
B7d00e6bd04c81d1fd78554a3d0c38b7?d=identicon&s=25 Keith Fahlgren (Guest)
on 2007-06-21 18:56
(Received via mailing list)
On 6/16/07, hinsen <h.gildhoff@web.de> wrote:
> Even this call is not
> working (it doesn't hit any node):

This seemed to work for me:
require 'rexml/document'
=> true

INPUT = <<INPUT_XML
<rss xmlns:geo="http://www.w3.org/2003/01/geo/wgs84_pos#" version="2.0"
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:xCal="urn:ietf:params:xml:ns:xcal">
  <channel>
    <title>Zvents search for events matching   within 60 miles of
6</title>
    <item>
      <pubDate>Wed, 30 May 2007 07:11:46 +0000</pubDate>
      <dc:date>2007-05-30T07:11:46+0000</dc:date>
    </item>
  </channel>
</rss>
INPUT_XML
=> "<rss xmlns:geo=\"http://www.w3.org/2003/01/geo/wgs84_pos#\"
version=\"2.0\"\nxmlns:dc=\"http://purl.org/dc/elements/1.1/\"\nxmlns:xCal=\"u...
 <channel>\n    <title>Zvents search for events matching   within 60
miles of 6</title>\n    <item>\n      <pubDate>Wed, 30 May 2007
07:11:46 +0000</pubDate>\n
<dc:date>2007-05-30T07:11:46+0000</dc:date>\n    </item>  \n
</channel>  \n</rss>  \n"

xml = REXML::Document.new(INPUT)
=> <UNDEFINED> ... </>

a = REXML::XPath.match(xml, "/rss/channel/item/dc:date", {
"dc"=>"http://purl.org/dc/elements/1.1/" })
=> [<dc:date> ... </>]

a.to_s
=> "<dc:date>2007-05-30T07:11:46+0000</dc:date>"
This topic is locked and can not be replied to.