Как мне получить данные из "#PCDATA" в Scala? - PullRequest
0 голосов
/ 04 декабря 2018
def loadXml(node: Node): Unit = {

  val children = node.child

  children.foreach(child => {
    var tag = child.label

    //if owner tag, load the owen
    if (tag == "zip")
    {
      loadZipXML(child)
    }
    else if (tag == "owner")
    {
      //if owner tag, make a new pet and have it load the info it wants, then add it to the list
      val owner = Owner()
      owner.loadXml(child)
      insurance += owner
    }
  })
}

У меня есть следующий код, и я передаю ему этот XML:

<?xml version='1.0' encoding='UTF-8'?>
<insurance>
    <zip code="57701">
        <owner name="Harold">
        </owner>
        <owner name="Bob">
        </owner>
        <owner name="Indiana Jones">
        </owner>
        <owner name="Darth Vader">
        </owner>
    </zip>
    <zip code="57702">
        <owner name="Sue">
        </owner>
        <owner name="Captain Kirk">
        </owner>
    </zip>
    <zip code="57703">
    </zip>
</insurance>

Я могу отлично потянуть почтовый индекс.Но каждый раз, когда я становлюсь владельцем, лейбл становится #PCDATA.Я знаю, что это означает, что это дочерний элемент с большим количеством данных, но как мне получить эту метку и затем продолжить обход XML-файла?

1 Ответ

0 голосов
/ 05 декабря 2018

Не знаю, зачем вам нужна метка XML, но похоже, что вы пытаетесь перенаправить данные в структуру данных «владельца».Например, рассмотрим этот класс «owner»:

final case class Owner(
  label: String, 
  name:  String, 
  text:  String, 
  zip:   String)

Я бы, вероятно, перебрал XML как:

val insurance = scala.xml.XML.load("insurance.xml")
val owners = 
  for {
    zip   <- insurance \ "zip"
    owner <- zip \ "owner"
  } yield {
    Owner(
      label = owner.label, 
      name  = owner \@ "name",
      text  = owner.text.trim,
      zip   = zip \@ "code"
    )
  }

Печать файла:

owners.foreach(println)

Выходы:

    Owner(owner,Harold,,57701)
    Owner(owner,Bob,,57701)
    Owner(owner,Indiana Jones,,57701)
    Owner(owner,Darth Vader,,57701)
    Owner(owner,Sue,,57702)
    Owner(owner,Captain Kirk,,57702)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...