Почему Scala XML-литералы чувствительны к пробелу между тегами?

Я обнаружил, что литералы XML Scala чувствительны к пробелу, что странно, не так ли? поскольку синтаксические анализаторы XML обычно не проклинают пробелы между тегами.

Это облом, потому что я хотел бы аккуратно указать свой код в моем коде:

<sample>
  <hello />
</sample>

но Scala считает, что это значение отличается от

<sample><hello /></sample>

Доказательство находится в пудинге:

scala> val xml1 = <sample><hello /></sample>
xml1: scala.xml.Elem = <sample><hello></hello></sample>

scala> val xml2 = <sample>
     | <hello />
     | </sample>
xml2: scala.xml.Elem = 
<sample>
<hello></hello>
</sample>

scala> xml1 == <sample><hello /></sample>
res0: Boolean = true

scala> xml1 == xml2
res1: Boolean = false

... Что дает?

Ответы

Ответ 1

Если вам понравилось, вы должны надеть на него обрезку:

scala> val xml1 = <sample><hello /></sample>
xml1: scala.xml.Elem = <sample><hello></hello></sample>

scala> val xml2 = <sample>
     | <hello />
     | </sample>
xml2: scala.xml.Elem = 
<sample>
<hello></hello>
</sample>

scala> xml1 == xml2
res14: Boolean = false

scala> xml.Utility.trim(xml1) == xml.Utility.trim(xml2)
res15: Boolean = true

Ответ 2

Если вы хотите преобразовать литерал XML в StringBuilder:

scala> val xml1 = <sample><hello /></sample>
xml1: scala.xml.Elem = <sample><hello></hello></sample>

scala> xml.Utility.toXML(xml1, minimizeTags=true)
res2: StringBuilder = <sample><hello /></sample>