У меня есть XML файл, который я хотел бы сопоставить с некоторыми атрибутами in с script. Например:
<a>
<b attr1 = "100" attr2 = "50"/>
</a>
могут иметь атрибуты, масштабированные в два раза:
<a>
<b attr1 = "200" attr2 = "100"/>
</a>
На этой странице есть предложение добавить атрибуты, но не детализирует способ сопоставления текущего атрибута с функцией (таким образом это будет очень сложно): http://www.scalaclass.com/book/export/html/1
То, что я придумал, - это вручную создать связанный список XML (не scala)... что-то вроде:
// a typical match case for running thru XML elements:
case Elem(prefix, e, attributes, scope, children @ _*) => {
var newAttribs = attributes
for(attr <- newAttribs) attr.key match {
case "attr1" => newAttribs = attribs.append(new UnprefixedAttribute("attr1", (attr.value.head.text.toFloat * 2.0f).toString, attr.next))
case "attr2" => newAttribs = attribs.append(new UnprefixedAttribute("attr2", (attr.value.head.text.toFloat * 2.0f).toString, attr.next))
case _ =>
}
Elem(prefix, e, newAttribs, scope, updateSubNode(children) : _*) // set new attribs and process the child elements
}
Его отвратительный, многословный и бесполезно переупорядочивает атрибуты в выходе, что плохо для моего текущего проекта из-за плохого кода клиента. Есть ли scala -образный способ сделать это?