我有以下XML文档:
[HttpPost]
public ActionResult SavePost(Post post)
{
db.Posts.Add(post);
db.SaveChanges();
return RedirectToAction("index");
}
我想将<releases>
<release>
<videos>
<video duration="599" embed="true" src="http://www.youtube.com/watch?v=TivSU1-ASPQ"/>
</videos>
</release>
</releases>
转换为分钟和秒。我使用以下代码转换
@duration
但是,我得到declare namespace local = "http://www.foobar.org";
declare function local:convert($v) as xs:decimal?
{
$v/60
};
let $r := doc("releases.xml") return
for $i in $r/releases/release/videos/video
return local:convert($i/@duration)
作为结果。我不明白我做错了什么。
PS:请注意我有多个视频,这就是我使用FLWOR表达式的原因。
答案 0 :(得分:6)
在XQuery中,/
不表示除法运算符,而是表示轴步。请改用div
。您的查询会返回每个60
的小数$v
。您也可以尝试使用(<foo/>, <bar/>)/42
获得类似的结果,这会将数字42返回两次。
此外,对于不兼容的类型,该功能将失败。除法的结果是xs:double
,而不是xs:decimal
(仅适用于整数)。如果你想要整数,则将函数声明为返回xs:double
(或cast/round to a decimal。)
declare function local:convert($v) as xs:double?
{
$v div 60
};