случай совпадения узла scala - PullRequest
2 голосов
/ 28 февраля 2012

это работает:

<a>apple</a>

node match {
  case <a>{contents}</a> => "It's an a: "+ contents
  case _ => "It's something else."
}

как мне изменить этот пример, чтобы он соответствовал только узлу с тегом "a" и атрибутом id = 2: что-то вроде следующего:

<a id="2">apple</a>

node match {
  case <a id="2">{contents}</a> => "It's an a: "+ contents
  case _ => "It's something else."
}

но это не компилируется.

Ответы [ 3 ]

3 голосов
/ 29 февраля 2012

Еще один способ, просто ради этого.

<a id="2">apple</a> match {
  case Node("a", Attribute("id", Text("2"), _), Text(contents)) => contents
}

Хотя не работает для нескольких атрибутов.

3 голосов
/ 28 февраля 2012

Вот один из способов сделать это:

node match {
  case a @ <a>{contents}</a> if (a \ "@id").text == "2" => "It's an a: " + contents
  case _ => "It's something else."
}
2 голосов
/ 28 февраля 2012

Похоже, вам нужна полная поддержка XPath для написания запросов типа "a [id = '2']"

Scala Scales - один из доступных вариантов.

Но в дополнение к ответу Филиппа я могу предложить этот запрос

import scala.xml.Text
val node = <a id="2">apple</a>
(node  \\"a" \"@id").text match {
  case "2" => "It's an a: "+ (node \\"a").text
  case _ => "It's something else."
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...