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