查看RSS,像Craigslist(http://chambana.craigslist.org/cta/index.rss)之类的东西给出了两个命名空间的节点。
类似的东西:
<item rdf:about="http://dallas.craigslist.org/sdf/cto/4206532641.html">
<title>
<![CDATA[ 1965 Pontiac Tempest GTO tribute ]]>
</title>
...tl;dr...
<dc:title>
<![CDATA[ 1965 Pontiac Tempest GTO tribute ]]>
</dc:title>
</item>
类似的东西:
(item \ "title").text
给出标题两次。你如何访问命名空间节点?
答案 0 :(得分:4)
您需要过滤生成的NodeSeq
:
val unprefixedTitle = (item \ "title").filter(_.prefix == null)
val dublinCoreTitle = (item \ "title").filter(_.prefix == "dc")
每个过滤后的序列都包含一个元素。
如果您拥有整个文档(或至少具有命名空间声明的部分),您可以按名称空间而不是前缀进行过滤,这更加健壮:
val dublinCoreTitle = (item \ "title").filter(
_.namespace == "http://purl.org/dc/elements/1.1/"
)
现在,即使您正在使用恰好将此命名空间映射到不同前缀的文档,您也将获得所需的元素。