我正在将XML发布到我的Play应用程序中,并且我希望我的控制器操作查找特定的字段,更新该字段的值,然后将其发送回去。
XML示例:
<name>shrek</name>
<type>ogre</type>
<category>dank</category>
我的控制器操作仅返回我发布的相同XML:
def updateShrekXML() = Action(parse.xml) { request =>
Ok(request.body)
}
我看过Play文档,但是它非常有限,如何返回带有更新字段的XML,例如更改shrek
为kek
?
是的,我们XML
在Docs中没有发现太多有关解析和更新的信息。
但我们可以通过考虑实现这一目标XML Node
的Scala Class
这是一个在您的情况下有效的工作示例
为您的XML对象创建一个Scala模型
class SomeXML(var name: String, var itemType: String, var category: String){
def toXML = { //converts to XML
<xml>
<name>{name}</name>
<type>{itemType}</type>
<category>{category}</category>
</xml>
}
//we can also use setters / getters without writing XML node everytime. Just calling .toXML gives the node
def updateName(newName: String) ={ //updates name
<xml>
<name>{newName}</name>
<type>{itemType}</type>
<category>{category}</category>
</xml>
}
//some other utilities of your choice
}
相同的类对象反序列化XML
object SomeXML {
def fromXML(xmlNode: scala.xml.Node) = { //converts XML to Scala Object
val name = (xmlNode \ "name").text
val itemType = (xmlNode \ "type").text
val category = (xmlNode \ "category").text
new SomeXML(name, itemType, category)
}
}
您的控制器:
def updateXML() = Action(parse.xml) { request =>
val originalXML = SomeXML.fromXML(request.body.head) //(.head) reads XML node from Node sequence
val updatedXML = originalXML.updateName("YourName")
Ok(updatedXML)
//Output: YourName ogre dank
}
同样,我们可以scala class
为每个对象创建XML request
并编写自己的实用程序函数进行操作。
如果在中找到可以使用此功能的任何库或实用程序,我将在此处进行更新play framework
。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句