我对于最近来自java背景的Scala的工作比较陌生。从XML中提取元素名称和属性值
我正在寻求建议,以创建一种有效的读取XML文件的方式,并提取包含在括号之间数据的位置中的元素名称和属性。
例如
<一些名> {属性} <一些名称/>
所以关键是有包含在{}数据,其中
我当时想使用包含在{}之间的实际元素名称和属性值填充哈希映射。
我相信这不是太复杂,但考虑到我目前有限的Scala专业知识,我想在论坛内反对这个问题。
非常感谢任何人花时间回答。
我对于最近来自java背景的Scala的工作比较陌生。从XML中提取元素名称和属性值
我正在寻求建议,以创建一种有效的读取XML文件的方式,并提取包含在括号之间数据的位置中的元素名称和属性。
例如
<一些名> {属性} <一些名称/>
所以关键是有包含在{}数据,其中
我当时想使用包含在{}之间的实际元素名称和属性值填充哈希映射。
我相信这不是太复杂,但考虑到我目前有限的Scala专业知识,我想在论坛内反对这个问题。
非常感谢任何人花时间回答。
[已更新] 刚刚意识到你已经在文本中询问了大括号,而不是关于xml相关的语法大括号。 可能的答案是:
scala> val xml = <a>
<prop>{{key1}}</prop>
<prop>{{key2}}</prop>
<prop>notkey</prop>
</a>
xml: scala.xml.Elem = <a><prop>{key1}</prop><prop>{key2}</prop><prop>notkey</prop></a>
我已经翻了一番{
和}
逃脱牙套,因为Scala治疗{
变量}
作为替补:
scala> val text="all your base are belong to us"
text: java.lang.String = all your base are belong to us
scala> val template = <a>{text}</a>
template: scala.xml.Elem = <a>all your base are belong to us</a>
现在回去工作。
只能使用prop's
使用\
投影算子,它将带有给定名称的子节点。取得xml树中的所有sub-sub -...-子节点,而不是使用\\
。
scala> val props = xml\"prop"
props: scala.xml.NodeSeq = NodeSeq(<prop>{key1}</prop>, <prop>{key2}</prop>, <prop>notkey</prop>)
val keys = props.filter (p => p.text.startsWith("{"))
res3: scala.xml.NodeSeq = NodeSeq(<prop>{key1}</prop>, <prop>{key2}</prop>)
其实,我在这里受骗,以为所不期望的属性字段不能在形式上{存在notkey。您可以重写代码以其他方式过滤密钥(例如,使用正则表达式)
scala> for(k <- keys) {
| println(k.label+":"+k.text)
| }
prop:{key1}
prop:{key2}
您可以举一个实际的输入示例,并且您想要添加什么键/值?可能会有比现在接受的答案更好的解决方案。 –