- xml - AJAX/Jquery XML 解析
- 具有多重继承的 XML 模式
- .net - 枚举序列化 Json 与 XML
- XML 简单类型、简单内容、复杂类型、复杂内容
我在 scala 中使用 assert 函数来比较 xml 文件。我的问题是我希望能够计算元素的数量,例如:
<recording>
<mousemove y="53" x="300" t="9031"/>
<keydown kc="s" t="9759"/>
<keypress cc="s" t="9759"/>
<keyup kc="s" t="9829"/>
<execextern streamID="18" t="9833"/>
<keydown kc="s" t="10135"/>
<keypress cc="s" t="10135"/>
<keyup kc="s" t="10207"/>
<execextern streamID="19" t="10207"/>
<keydown kc="s" t="10934"/>
<keypress cc="s" t="10934"/>
<keyup kc="s" t="10989"/>
<execextern streamID="20" t="10989"/>
<keydown kc="s" t="11362"/>
<keypress cc="s" t="11366"/>
</recording>
我希望能够计算 keydown 元素、keydown 元素、按键等的数量...
最佳答案
将你的录音标签做成一个Seq[Node]
,并计算每个标签:
scala> :paste
// Entering paste mode (ctrl-D to finish)
val xml = <recording>
<mousemove y="53" x="300" t="9031"/>
<keydown kc="s" t="9759"/>
<keypress cc="s" t="9759"/>
<keyup kc="s" t="9829"/>
<execextern streamID="18" t="9833"/>
<keydown kc="s" t="10135"/>
<keypress cc="s" t="10135"/>
<keyup kc="s" t="10207"/>
<execextern streamID="19" t="10207"/>
<keydown kc="s" t="10934"/>
<keypress cc="s" t="10934"/>
<keyup kc="s" t="10989"/>
<execextern streamID="20" t="10989"/>
<keydown kc="s" t="11362"/>
<keypress cc="s" t="11366"/>
</recording>
// number of empty entries for whatever reason.
// Not necessary if you're not using children again after this.
val children = xml.child.filterNot(_.toString().trim.isEmpty)
val mousemoveCount = children.count(_.label == "mousemove")
val keydownCount = children.count(_.label == "keydown")
val keypressCount = children.count(_.label == "keypress")
val keyupCount = children.count(_.label == "keyup")
val execexternCount = children.count(_.label == "execextern")
println(s"number of mousemove events: $mousemoveCount")
println(s"number of keydown events: $keydownCount")
println(s"number of keypress events: $keypressCount")
println(s"number of keyup events: $keyupCount")
println(s"number of execextern events: $execexternCount")
// Exiting paste mode, now interpreting.
number of mousemove events: 1
number of keydown events: 4
number of keypress events: 4
number of keyup events: 3
number of execextern events: 3
编辑
要计算 recording
中的所有 XML 节点,保留 .filternot(...)
部分并使用 val allCount = children.size
。即:
val children = xml.child.filterNot(_.toString().trim.isEmpty)
val allCount = children.size
此外,要将其变成一个通用函数,您只需将要搜索的子节点变成一个变量即可:
scala> :paste
// Entering paste mode (ctrl-D to finish)
val xml = <recording>
<mousemove y="53" x="300" t="9031"/>
<keydown kc="s" t="9759"/>
<keypress cc="s" t="9759"/>
<keyup kc="s" t="9829"/>
<execextern streamID="18" t="9833"/>
<keydown kc="s" t="10135"/>
<keypress cc="s" t="10135"/>
<keyup kc="s" t="10207"/>
<execextern streamID="19" t="10207"/>
<keydown kc="s" t="10934"/>
<keypress cc="s" t="10934"/>
<keyup kc="s" t="10989"/>
<execextern streamID="20" t="10989"/>
<keydown kc="s" t="11362"/>
<keypress cc="s" t="11366"/>
</recording>
val children = xml.child.filterNot(_.toString().trim.isEmpty)
def countNodes(nodeName: String): Int = children.count(_.label == nodeName)
val allCount = children.size
println(s"number of mousemove events: ${countNodes("mousemove")}")
println(s"number of keydown events: ${countNodes("keydown")}")
println(s"number of keypress events: ${countNodes("keypress")}")
println(s"number of keyup events: ${countNodes("keyup")}")
println(s"number of execextern events: ${countNodes("execextern")}")
println(s"total number of events: $allCount")
// Exiting paste mode, now interpreting.
number of mousemove events: 1
number of keydown events: 4
number of keypress events: 4
number of keyup events: 3
number of execextern events: 3
total number of events: 15
编辑 2
如果你想让它通用,我建议你通过按节点标签分组将它放在一个 Map 中。
例如,如果您只需要节点名称和大小,则可以这样做:
children.groupBy(_.label).map {
case(k, v) => (k, v.size)
}
// Map(mousemove -> 1, keydown -> 4, execextern -> 3, keypress -> 4, keyup -> 3)
如果你想要整个节点,你可以删除 .map
:
import scala.xml.Node
val nodeSizeMap: Map[String, Seq[Node]] = children.groupBy(_.label)
// Map(
// mousemove -> ArrayBuffer(<mousemove y="53" x="300" t="9031"/>),
// keydown -> ArrayBuffer(<keydown kc="s" t="9759"/>, <keydown kc="s" t="10135"/>, <keydown kc="s" t="10934"/>, <keydown kc="s" t="11362"/>),
// execextern -> ArrayBuffer(<execextern streamID="18" t="9833"/>, <execextern streamID="19" t="10207"/>, <execextern streamID="20" t="10989"/>),
// keypress -> ArrayBuffer(<keypress cc="s" t="9759"/>, <keypress cc="s" t="10135"/>, <keypress cc="s" t="10934"/>, <keypress cc="s" t="11366"/>),
// keyup -> ArrayBuffer(<keyup kc="s" t="9829"/>, <keyup kc="s" t="10207"/>, <keyup kc="s" t="10989"/>)
// )
在上下文中:
scala> :paste
// Entering paste mode (ctrl-D to finish)
val xml = <recording>
<mousemove y="53" x="300" t="9031"/>
<keydown kc="s" t="9759"/>
<keypress cc="s" t="9759"/>
<keyup kc="s" t="9829"/>
<execextern streamID="18" t="9833"/>
<keydown kc="s" t="10135"/>
<keypress cc="s" t="10135"/>
<keyup kc="s" t="10207"/>
<execextern streamID="19" t="10207"/>
<keydown kc="s" t="10934"/>
<keypress cc="s" t="10934"/>
<keyup kc="s" t="10989"/>
<execextern streamID="20" t="10989"/>
<keydown kc="s" t="11362"/>
<keypress cc="s" t="11366"/>
</recording>
val children = xml.child.filterNot(_.toString().trim.isEmpty)
def countNodes(nodeName: String): Int = children.count(_.label == nodeName)
val allCount = children.size
// if you just want to print
children.groupBy(_.label).foreach {
case (k, v) => println(s"number of $k events: ${v.size}")
}
println()
// if you want to do something with the values
val nodeSizeMap: Map[String, Int] = children.groupBy(_.label).map {
case(k, v) => (k, v.size)
}
// ... do something with nodeSizeMap
nodeSizeMap.foreach {
case (k, v) => println(s"number of $k events: $v")
}
// Exiting paste mode, now interpreting.
number of mousemove events: 1
number of keydown events: 4
number of execextern events: 3
number of keypress events: 4
number of keyup events: 3
number of mousemove events: 1
number of keydown events: 4
number of execextern events: 3
number of keypress events: 4
number of keyup events: 3
编辑 3
要使这个更加通用,并允许通过嵌套标签进行搜索,您可以使用神奇的 XML 通配符 _
进行搜索。这是一个示例(请原谅 XML 的愚蠢):
scala> :paste
// Entering paste mode (ctrl-D to finish)
val xml = <family>
<mother name="julie" />
<father name="harold" />
<child name="billy" status="good child" />
<child name="charlie" status="good child" />
<child name="mandy" status="bad child" />
<child name="nigel" status="bad child" />
<extendedfamily>
<uncle name="jeff" />
<auntie name="vicky" />
<cousin name="little boy 1" />
<cousin name="little boy 2" />
</extendedfamily>
</family>
val familyMap = (xml \\ "_").groupBy(_.label).map { case (k, v) => (k, v.size) }
familyMap foreach {
case (k, v) => println(s"$k count: $v")
}
// Exiting paste mode, now interpreting.
mother count: 1
auntie count: 1
uncle count: 1
child count: 4
extendedfamily count: 1
father count: 1
cousin count: 2
family count: 1
关于xml - 如何使用 Scala 计算 XML 文件中的元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52855610/
我想做的是让 JTextPane 在 JPanel 中占用尽可能多的空间。对于我使用的 UpdateInfoPanel: public class UpdateInfoPanel extends JP
我在 JPanel 中有一个 JTextArea,我想将其与 JScrollPane 一起使用。我正在使用 GridBagLayout。当我运行它时,框架似乎为 JScrollPane 腾出了空间,但
我想在 xcode 中实现以下功能。 我有一个 View Controller 。在这个 UIViewController 中,我有一个 UITabBar。它们下面是一个 UIView。将 UITab
有谁知道Firebird 2.5有没有类似于SQL中“STUFF”函数的功能? 我有一个包含父用户记录的表,另一个表包含与父相关的子用户记录。我希望能够提取用户拥有的“ROLES”的逗号分隔字符串,而
我想使用 JSON 作为 mirth channel 的输入和输出,例如详细信息保存在数据库中或创建 HL7 消息。 简而言之,输入为 JSON 解析它并输出为任何格式。 最佳答案 var objec
通常我会使用 R 并执行 merge.by,但这个文件似乎太大了,部门中的任何一台计算机都无法处理它! (任何从事遗传学工作的人的附加信息)本质上,插补似乎删除了 snp ID 的 rs 数字,我只剩
我有一个以前可能被问过的问题,但我很难找到正确的描述。我希望有人能帮助我。 在下面的代码中,我设置了varprice,我想添加javascript变量accu_id以通过rails在我的数据库中查找记
我有一个简单的 SVG 文件,在 Firefox 中可以正常查看 - 它的一些包装文本使用 foreignObject 包含一些 HTML - 文本包装在 div 中:
所以我正在为学校编写一个 Ruby 程序,如果某个值是 1 或 3,则将 bool 值更改为 true,如果是 0 或 2,则更改为 false。由于我有 Java 背景,所以我认为这段代码应该有效:
我做了什么: 我在这些账户之间创建了 VPC 对等连接 互联网网关也连接到每个 VPC 还配置了路由表(以允许来自双方的流量) 情况1: 当这两个 VPC 在同一个账户中时,我成功测试了从另一个 La
我有一个名为 contacts 的表: user_id contact_id 10294 10295 10294 10293 10293 10294 102
我正在使用 Magento 中的新模板。为避免重复代码,我想为每个产品预览使用相同的子模板。 特别是我做了这样一个展示: $products = Mage::getModel('catalog/pro
“for”是否总是检查协议(protocol)中定义的每个函数中第一个参数的类型? 编辑(改写): 当协议(protocol)方法只有一个参数时,根据该单个参数的类型(直接或任意)找到实现。当协议(p
我想从我的 PHP 代码中调用 JavaScript 函数。我通过使用以下方法实现了这一点: echo ' drawChart($id); '; 这工作正常,但我想从我的 PHP 代码中获取数据,我使
这个问题已经有答案了: Event binding on dynamically created elements? (23 个回答) 已关闭 5 年前。 我有一个动态表单,我想在其中附加一些其他 h
我正在尝试找到一种解决方案,以在 componentDidMount 中的映射项上使用 setState。 我正在使用 GraphQL连同 Gatsby返回许多 data 项目,但要求在特定的 pat
我在 ScrollView 中有一个 View 。只要用户按住该 View ,我想每 80 毫秒调用一次方法。这是我已经实现的: final Runnable vibrate = new Runnab
我用 jni 开发了一个 android 应用程序。我在 GetStringUTFChars 的 dvmDecodeIndirectRef 中得到了一个 dvmabort。我只中止了一次。 为什么会这
当我到达我的 Activity 时,我调用 FragmentPagerAdapter 来处理我的不同选项卡。在我的一个选项卡中,我想显示一个 RecyclerView,但他从未出现过,有了断点,我看到
当我按下 Activity 中的按钮时,会弹出一个 DialogFragment。在对话框 fragment 中,有一个看起来像普通 ListView 的 RecyclerView。 我想要的行为是当
我是一名优秀的程序员,十分优秀!