Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/unix/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
简单Scala XML解析_Xml_Scala_Date_Parsing_Xml Parsing - Fatal编程技术网

简单Scala XML解析

简单Scala XML解析,xml,scala,date,parsing,xml-parsing,Xml,Scala,Date,Parsing,Xml Parsing,我有一个XML文件,其中包含数百条如下消息,表示车辆在检查站的通行时间 <ttt:appMsg xmlns:ttt="railrt/ttt/v0100" channel="rct" id="019176" time="2016-06-08T06:01:01.260"> <rct:st prodDatum="2016-06-08" Number="62713"> <pbpData pat="2016-06-08T04:28:02" pbpID="RY@P121

我有一个XML文件,其中包含数百条如下消息,表示车辆在检查站的通行时间

<ttt:appMsg xmlns:ttt="railrt/ttt/v0100" channel="rct" id="019176" time="2016-06-08T06:01:01.260">
<rct:st prodDatum="2016-06-08" Number="62713">
    <pbpData pat="2016-06-08T04:28:02" pbpID="RY@P121" pdt="2016-06-08T04:28:02"/>
    <pbpData pat="2016-06-08T04:28:11" pbpID="RY@P5215" pdt="2016-06-08T04:28:13"/>
    <pbpData pat="2016-06-08T04:28:31" pbpID="RY@P5221" pdt="2016-06-08T04:28:31"/>
    <pbpData pat="2016-06-08T04:28:40" pbpID="RY@P5223" pdt="2016-06-08T04:28:41"/>
    <pbpData pat="2016-06-08T04:28:47" pbpID="RY@P5233" pdt="2016-06-08T04:28:49"/>
    <pbpData pat="2016-06-08T04:28:56" pbpID="RY@P5241" pdt="2016-06-08T04:28:56"/>
    <pbpData pat="2016-06-08T04:29:04" pbpID="RY@P5243" pdt="2016-06-08T04:29:06"/>
    <pbpData pat="2016-06-08T04:29:25" pbpID="RY@P5245" pdt="2016-06-08T04:29:29"/>
    <pbpData pat="2016-06-08T04:29:38" pbpID="RY@P5247" pdt="2016-06-08T04:29:40"/>
    <pbpData pat="2016-06-08T04:29:51" pbpID="RY@P5253" pdt="2016-06-08T04:29:54"/>
    <pbpData pat="2016-06-08T04:30:08" pbpID="ER@P5261" pdt="2016-06-08T04:30:13"/>
    <pbpData pat="2016-06-08T05:59:18" pbpID="POLS@P127" pdt="2016-06-08T05:59:18"/>
    <pbpData pat="2016-06-08T06:00:28" pbpID="POLS@POLS31P" pdt="2016-06-08T06:00:28"/>
    <pbpData pat="2016-06-08T06:01:19" pbpID="POLS@POLS41P" pdt="2016-06-08T06:01:19"/>
    <pbpData pat="2016-06-08T06:01:41" pbpID="POLS@POLS316P" pdt="2016-06-08T06:01:41"/>
    <pbpData pat="2016-06-08T06:01:56" pbpID="POLS@POLS318P" pdt="2016-06-08T06:01:56"/>
    <pbpData pat="2016-06-08T06:02:09" pbpID="POLS@POLS320P" pdt="2016-06-08T06:02:09"/>
    <pbpData pat="2016-06-08T06:02:16" pbpID="BIA@POLS322P" pdt="2016-06-08T06:02:16"/>
</rct:st>

我不熟悉Scala,但从我所阅读的内容来看,有一种简单的方法(即,在几行代码中)可以解析并存储到汽车对象属性中,如ID(“rat:st标记中的数字”)和检查点列表(“pbpData”行,每个行由一个节点ID和两个时间变量标识)

此外,您认为有没有办法以YYYY-MM-DDThh:MM:ss格式保存这些时间,并使用Scala作为日期属性?我四处搜索,但只找到了一个在Java中更改日期/时间格式的方法,这只真正解释了如何更改日期的显示方式,而我想做的恰恰相反:将这个写得很有趣的日期/时间保存为有效的Scala时间


谢谢大家。

标准Scala XML解析器应该适用于几百行XML(对于要求更高的情况,还有其他XML解析器可能更好):

case-class-Car(pat:String,pbpID:String,pdt:String)
val xml=scala.xml.xml.loadString()
xml\\“pbpData”映射{node=>
Car(节点\\“@pat”文本,节点\\“@pbpID”文本,节点\\“@pdt”文本)
}
这将提取数据,但为了将日期转换为日期对象,我建议使用jodatime作为解析ISO日期的最佳选项。

xtract库()可能很有用

在你的情况下,你可以这样做

case class Car(pat: String, pbpID: String, pdt: String)
object Car {
  implicit val reader: XmlReader[Car] = (
    attribute[String]("pat") and
    attribute[String]("pbpID") and
    attribute[String]("pdt")
  )(apply _)
}
XMlReader.of[Seq[Car]].read(xml \\ "pbpData")
然后你可以得到一个序列,比如

case class Car(pat: String, pbpID: String, pdt: String)
object Car {
  implicit val reader: XmlReader[Car] = (
    attribute[String]("pat") and
    attribute[String]("pbpID") and
    attribute[String]("pdt")
  )(apply _)
}
XMlReader.of[Seq[Car]].read(xml \\ "pbpData")
有一篇博文详细介绍了这一点

Discalaimer:我写了大部分的Extract和提到的博客文章,我是Lucid软件的员工