如何使用xpath在Orchestration中将int转换为十进制?我的QuantityReturned字段在我的模式中是类型整数,当它调用它转换为十进制的web服务并调用webservice时。下面是QuantityReturned的xpath查询。
QuantityReturned=xpath(OrderReturnMessage,
"number(/*[local-name()='QuantityReturned' and namespace-uri()=''])");
wSReturnSuccess = WebServiceHelper.CreateReturnAAAWS
(System.Convert.ToDecimal(QuantityReturned));
在xpath查询中尝试使用数字函数时,抛出输入字符串格式不正确的错误。
答案 0 :(得分:1)
您的xpath很可能不正确并返回一个无法转换为十进制的值。
您可以针对消息xml评估xpath并查看实际返回的内容吗?您当前的表达式解析为名为QuantityReturned的非限定根级元素的值。
除非您的消息xml与此匹配,否则您的xpath可能会返回空字符串。
答案 1 :(得分:0)
除了Tom Redfern的答案,这可能是根本原因,我建议将其重构为外部程序集中的调用,例如:
public static decimal StringToDecimal(string s)
{
if (string.IsNullOrWhiteSpace(s))
{
// log error, throw exception, or just return a default value if acceptable
}
decimal d;
if (decimal.TryParse(s, out d))
{
return d;
}
else
{
// appropriately log errors and/or throw a more meaningful exception
}
}
您还可以查看TryParse
的其他重载提供的一些NumberStyles
选项。
您可以在业务流程中执行此操作,但如果此方法变得更复杂,它将在表达式编辑器中开始显得非常难看 - 即使它看起来像是在表达式编辑器中有点难看。