草庐IT

xml - 简单的 Scala XML 解析

coder 2024-06-29 原文

我有一个 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 的新手,但是根据我一直在阅读的内容,有一种简单的方法(即,几行代码)来解析它并将其存储到 Car 对象属性中,例如 ID(“数字”在 rat:st 标签中)和检查点列表(“pbpData”行,每行由一个节点 ID 和两个时间变量标识)。

此外,您是否认为有一种方法可以将这些时间以 YYYY-MM-DDThh:mm:ss 格式保存,并将 Scala 作为 Date 属性?我四处寻找,但只找到了 tutorial对于更改 Java 中的日期/时间格式,这只是真正解释了如何更改日期的显示方式,而我希望做相反的事情:将这个有趣的日期/时间保存为有效的 Scala 时间。

谢谢大家

最佳答案

xtract 库 ( https://github.com/lucidsoftware/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")

有一篇博客文章更详细 here .

免责声明:我撰写了大部分 Xtract 和提到的博客文章,并且是 Lucid Software 的员工。

关于xml - 简单的 Scala XML 解析,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37789305/

有关xml - 简单的 Scala XML 解析的更多相关文章

  1. Ruby 解析字符串 - 2

    我有一个字符串input="maybe(thisis|thatwas)some((nice|ugly)(day|night)|(strange(weather|time)))"Ruby中解析该字符串的最佳方法是什么?我的意思是脚本应该能够像这样构建句子:maybethisissomeuglynightmaybethatwassomenicenightmaybethiswassomestrangetime等等,你明白了......我应该一个字符一个字符地读取字符串并构建一个带有堆栈的状态机来存储括号值以供以后计算,还是有更好的方法?也许为此目的准备了一个开箱即用的库?

  2. ruby - 解析 RDFa、微数据等的最佳方式是什么,使用统一的模式/词汇(例如 schema.org)存储和显示信息 - 2

    我主要使用Ruby来执行此操作,但到目前为止我的攻击计划如下:使用gemsrdf、rdf-rdfa和rdf-microdata或mida来解析给定任何URI的数据。我认为最好映射到像schema.org这样的统一模式,例如使用这个yaml文件,它试图描述数据词汇表和opengraph到schema.org之间的转换:#SchemaXtoschema.orgconversion#data-vocabularyDV:name:namestreet-address:streetAddressregion:addressRegionlocality:addressLocalityphoto:i

  3. ruby - 用逗号、双引号和编码解析 csv - 2

    我正在使用ruby​​1.9解析以下带有MacRoman字符的csv文件#encoding:ISO-8859-1#csv_parse.csvName,main-dialogue"Marceu","Giveittohimóhe,hiswife."我做了以下解析。require'csv'input_string=File.read("../csv_parse.rb").force_encoding("ISO-8859-1").encode("UTF-8")#=>"Name,main-dialogue\r\n\"Marceu\",\"Giveittohim\x97he,hiswife.\"\

  4. ruby-on-rails - 如何从 format.xml 中删除 <hash></hash> - 2

    我有一个对象has_many应呈现为xml的子对象。这不是问题。我的问题是我创建了一个Hash包含此数据,就像解析器需要它一样。但是rails自动将整个文件包含在.........我需要摆脱type="array"和我该如何处理?我没有在文档中找到任何内容。 最佳答案 我遇到了同样的问题;这是我的XML:我在用这个:entries.to_xml将散列数据转换为XML,但这会将条目的数据包装到中所以我修改了:entries.to_xml(root:"Contacts")但这仍然将转换后的XML包装在“联系人”中,将我的XML代码修改为

  5. ruby - 简单获取法拉第超时 - 2

    有没有办法在这个简单的get方法中添加超时选项?我正在使用法拉第3.3。Faraday.get(url)四处寻找,我只能先发起连接后应用超时选项,然后应用超时选项。或者有什么简单的方法?这就是我现在正在做的:conn=Faraday.newresponse=conn.getdo|req|req.urlurlreq.options.timeout=2#2secondsend 最佳答案 试试这个:conn=Faraday.newdo|conn|conn.options.timeout=20endresponse=conn.get(url

  6. ruby - 用 Ruby 编写一个简单的网络服务器 - 2

    我想在Ruby中创建一个用于开发目的的极其简单的Web服务器(不,不想使用现成的解决方案)。代码如下:#!/usr/bin/rubyrequire'socket'server=TCPServer.new('127.0.0.1',8080)whileconnection=server.acceptheaders=[]length=0whileline=connection.getsheaders想法是从命令行运行这个脚本,提供另一个脚本,它将在其标准输入上获取请求,并在其标准输出上返回完整的响应。到目前为止一切顺利,但事实证明这真的很脆弱,因为它在第二个请求上中断并出现错误:/usr/b

  7. ruby-on-rails - 简单的 Ruby on Rails 问题——如何将评论附加到用户和文章? - 2

    我意识到这可能是一个非常基本的问题,但我现在已经花了几天时间回过头来解决这个问题,但出于某种原因,Google就是没有帮助我。(我认为部分问题在于我是一个初学者,我不知道该问什么......)我也看过O'Reilly的RubyCookbook和RailsAPI,但我仍然停留在这个问题上.我找到了一些关于多态关系的信息,但它似乎不是我需要的(尽管如果我错了请告诉我)。我正在尝试调整MichaelHartl'stutorial创建一个包含用户、文章和评论的博客应用程序(不使用脚手架)。我希望评论既属于用户又属于文章。我的主要问题是:我不知道如何将当前文章的ID放入评论Controller。

  8. ruby-on-rails - 我更新了 ruby​​ gems,现在到处都收到解析树错误和弃用警告! - 2

    简而言之错误:NOTE:Gem::SourceIndex#add_specisdeprecated,useSpecification.add_spec.Itwillberemovedonorafter2011-11-01.Gem::SourceIndex#add_speccalledfrom/opt/local/lib/ruby/site_ruby/1.8/rubygems/source_index.rb:91./opt/local/lib/ruby/gems/1.8/gems/rails-2.3.8/lib/rails/gem_dependency.rb:275:in`==':und

  9. ruby - 使用 Ruby 通过 Outlook 发送消息的最简单方法是什么? - 2

    我的工作要求我为某些测试自动生成电子邮件。我一直在四处寻找,但未能找到可以快速实现的合理解决方案。它需要在outlook而不是其他邮件服务器中,因为我们有一些奇怪的身份验证规则,我们需要保存草稿而不是仅仅发送邮件的选项。显然win32ole可以做到这一点,但我找不到任何相当简单的例子。 最佳答案 假设存储了Outlook凭据并且您设置为自动登录到Outlook,WIN32OLE可以很好地完成此操作:require'win32ole'outlook=WIN32OLE.new('Outlook.Application')message=

  10. postman——集合——执行集合——测试脚本——pm对象简单示例02 - 2

    //1.验证返回状态码是否是200pm.test("Statuscodeis200",function(){pm.response.to.have.status(200);});//2.验证返回body内是否含有某个值pm.test("Bodymatchesstring",function(){pm.expect(pm.response.text()).to.include("string_you_want_to_search");});//3.验证某个返回值是否是100pm.test("Yourtestname",function(){varjsonData=pm.response.json

随机推荐