добавить узел xml, если его нет в списке - PullRequest
2 голосов
/ 22 марта 2019

У меня есть блок кода:

object XmlExample {

  def main(args: Array[String]): Unit = {
    val someXml = 
     <books>
      <book title="The Woman in White">
        <author>Wilkie Collins</author>
      </book> <book title="Great Expectations">
        <author>Charles Dickens</author>
      </book>
    </books>
    println("The xml object is of type: " + someXml.child)


  }

}

Я хочу проверить, не существует ли узел <c1> как его дочерний элемент, тогда я добавил его как <c1>Null</c1>

1 Ответ

1 голос
/ 22 марта 2019

Я не уверен, что полностью понял не существует как его потомок ... или что вы точно подразумеваете под Я добавилэто но вот мой прямой ответ на добавление, необязательно, прямого потомка книг :

def addC1IfNotHere(someXml: scala.xml.Elem) = (someXml \ "c1") match {
  case Seq() =>
    someXml.copy(child = <c1>Null</c1> +: someXml.child)
  case _ => someXml
}

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

val someXmlWithC1 = 
<books>
   <c1>anything else</c1>
   <book title="The Woman in White">
    <author>Wilkie Collins</author>
   </book> <book title="Great Expectations">
    <author>Charles Dickens</author>
  </book>
</books>
val someXmlWithoutC1 = 
<books>
   <book title="The Woman in White">
    <author>Wilkie Collins</author>
   </book> <book title="Great Expectations">
    <author>Charles Dickens</author>
  </book>
</books>
val hasItsOriginalC1 = addC1IfNotHere(someXmlWithC1)
val hasANewC1 = addC1IfNotHere(someXmlWithoutC1)
println(hasItsOriginalC1)
println(hasANewC1)

обычно должно печатать:

<books>
   <c1>anything else</c1>
   <book title="The Woman in White">
    <author>Wilkie Collins</author>
   </book> <book title="Great Expectations">
    <author>Charles Dickens</author>
  </book>
</books>
<books><c1>Null</c1>
   <book title="The Woman in White">
    <author>Wilkie Collins</author>
   </book> <book title="Great Expectations">
    <author>Charles Dickens</author>
  </book>
</books>

Надеюсь, это поможет.Не стесняйтесь, когда c1 находится не там, где вы ожидали, или в другом месте.

...