Scala:XML属性解析

Scala:XML属性解析,xml,parsing,scala,Xml,Parsing,Scala,我正在尝试解析一个rss提要,它的属性“date”如下所示: 但似乎什么都不管用。我错过了什么 任何帮助都将不胜感激 使用“@attrName”选择器检索属性中的“y”。因此,您的选择器实际上应该如下所示: println((rssFeed \\ "channel" \\ "item" \ "c" \ "@date").text) 另外,想想\和\之间的区别\\查找后代,而不仅仅是子代,如下所示(注意,它从通道跳到c,不带项): 或者,如果您只想要所有的元素,而不关心它们的父元素,那么您可以这

我正在尝试解析一个rss提要,它的属性“date”如下所示:

但似乎什么都不管用。我错过了什么


任何帮助都将不胜感激

使用“@attrName”选择器检索
属性中的“y”。因此,您的选择器实际上应该如下所示:

println((rssFeed \\ "channel" \\ "item" \ "c" \ "@date").text)

另外,想想\\之间的区别\\查找后代,而不仅仅是子代,如下所示(注意,它从通道跳到c,不带项):

或者,如果您只想要所有的元素,而不关心它们的父元素,那么您可以这样做:

scala> (rssFeed \\ "c" \ "@date").text            
res24: String = AA
这指定了一个精确的路径:

scala> (rssFeed \ "channel" \ "item" \ "c" \ "@date").text
res25: String = AA

也可以考虑使用顺序理解。它们对于处理XML非常有用,特别是在需要复杂条件时

对于简单的情况:

for {
  c <- rssFeed \\ "@date"
} yield c
用于{

c
rssFeed
?它不应该是
rss
?rssFeed是一个包含rss数据的变量。注意.text以字符串而不是节点索引的形式获取日期。
text
方法通常比
toString
更可取,因为它将优雅地处理选择器抓取一块XML而不是一个节点的情况
文本
节点。
scala> (rssFeed \\ "channel" \\ "c" \ "@date").text
res20: String = AA
scala> (rssFeed \\ "c" \ "@date").text            
res24: String = AA
scala> (rssFeed \ "channel" \ "item" \ "c" \ "@date").text
res25: String = AA
for {
  c <- rssFeed \\ "@date"
} yield c
val rssFeed = <rss version="2.0">
                <channel>
                  <item>
                    <y:c date="AA"></y:c>
                    <y:c date="AB"></y:c>
                    <y:c date="AC"></y:c>
                  </item>
                </channel>
              </rss>

val sep = "\n----\n"

for {
  channel <- rssFeed \ "channel"
  item <- channel \ "item"
  y <- item \ "c"
  date <- y \ "@date" if (date text).equals("AA")
} yield {
  val s = List(channel, item, y, date).mkString(sep)
  println(s)
}
    <channel>
                        <item>
                          <y:c date="AA"></y:c>
                          <y:c date="AB"></y:c>
                          <y:c date="AC"></y:c>
                        </item>
                      </channel>
    ----
    <item>
                          <y:c date="AA"></y:c>
                          <y:c date="AB"></y:c>
                          <y:c date="AC"></y:c>
                        </item>
    ----
    <y:c date="AA"></y:c>
    ----
    AA