我想检查XML标记中的属性是否存在。
这是示例xml标记:
<value @code="">
我要检查以下条件。
我目前正在检查以下情况:
if(msg['value'])
{
hasValue='true';
if(msg['value']['@code'])
{
hasCode='true';
}else
{
hasCode='false';
}
}
,但此条件返回 hasValue 标志始终为true。即使@code丢失/未定义。
是否可以检查@code是否未定义/缺失?
答案 0 :(得分:0)
首先需要检查placeHolder中是否存在具有特定标记名的元素。 getElementsByTagName返回NodeList,因此您可以通过以下方式检查其length
:
if( $placeHolder.getElementsByTagName(tagname).length > 0 )
答案 1 :(得分:0)
您可以使用hasOwnProperty()
检查元素或属性是否存在,也可以使用.toString()
检查属性值是否为空。
if(msg.hasOwnProperty('value')) {
hasValue='true';
if(msg.value.hasOwnProperty('@code') && msg.value['@code'].toString()) {
hasCode='true';
} else {
hasCode='false';
}
}
答案 2 :(得分:0)
hasOwnProperty通常不用于xml(对于使用javascript标签的用户,mirth嵌入了Mozilla Rhino javascript引擎,该引擎使用不推荐使用的e4x标准来处理xml。)当有多个名为的子元素时,hasOwnProperty的行为不符合预期value
。根据命名约定,我假设可以使用不同的代码来包含多个值。
这将为hasCode创建一个数组,该数组为每次出现的名为value的子元素保留一个布尔值。
var hasCode = [];
var hasValue = msg.value.length() > 0;
for each (var value in msg.value) {
// Use this to make sure the attribute named code exists
// hasCode.push(value['@code'].length() > 0);
// Use this to make sure the attribute named code exists and does not contain an empty string
// The toString will return an empty string even if the attribute does not exist
hasCode.push(value['@code'].toString().length > 0);
}
(length
是字符串的属性,它是xml对象的方法,因此括号是正确的。)