我正在尝试使用FreeMarker进行XML-XML转换。 处理null对象的正确方法是什么。 (不是值,而是空对象)
当" AlertIndicator"输入XML中不存在tag,我该如何处理它。 我尝试了所有这些组合,但似乎都没有用:(
<#if Response.Variables.AlertIndicator??>${Response.Variables.AlertIndicator}<#else></#if>
<#if (Response.Variables.AlertIndicator)??>${Response.Variables.AlertIndicator}<#else></#if>
${Response.Variables.AlertIndicator!""}
${(Response.Variables.AlertIndicator)!""}
所有这些都给了我一个例外
Expected a string or something automatically convertible to string (number, date or boolean), but this evaluated to a sequence+hash
Tip: This XML query result can't be used as string because for that it had to contain exactly 1 XML node, but it contains 0 nodes
唯一似乎是&#34; has_content&#34;但它需要两倍的处理时间,这对我的应用来说是一个很大的NO
答案 0 :(得分:1)
DOM查询的结果始终是节点列表,即使可能是0长度列表。结果节点列表本身始终存在,因此Response.Variables.AlertIndicator??
始终为true
。 (这也意味着如果没有Variables
并且没有AltertIndicators
,那么查询将工作相同,即,您可以安全地链接步骤。)因此您必须检查第一个节点在结果列表中存在:Response.Variables.AlertIndicator[0]??
答案 1 :(得分:0)
标签存在时,您可以使用大于 var timeScale1 = d3.scaleTime()
.domain([new Date(2018, 0, 1), new Date(2018, 0, 31)])
.range(0, 700);
var temp1 = timeScale1(new Date(2018, 0, 20));
console.log(temp1); // 443.3333333333333 (pixels)
的{{1}}:
?size
不确定它是否会比0
更快,您需要检查,如果没有,请以不同的方式对其进行优化。在检查之前分配给变量是一个简单的优化。
<#if Response.Variables.AlertIndicator?size gt 0>${Response.Variables.AlertIndicator}</#if>